C语言学生成绩管理系统(输入输出删除插入查找排序)
用c语言编写学生成绩管理系统
#i n c l u d e<s t d i o.h> #include<string.h>#include<process.h>#include<conio.h>#define N 30#define M 3typedef struct student{char number[10];char name[20];float score[M];float aver;float total;}STU;STU stu[N];int n;void inputscore(void);void savescore(void);void avergescore(void);void total(void);void modifyscore(void);void lookscore(void);void searchscore(void);void statistic(void);void add(void);void modify(void);void delscore(void);void menu(void);void main(){short int flag=0;menu();do{flag=1;switch(getch()){case'1' : inputscore();break; /*输入成绩*/case'2' : lookscore();break; /*查看成绩*/case'3' : searchscore();break; /*查找成绩*/case'4' : statistic();break; /*成绩统计*/case'5' : modify();break; /*修改成绩*/case'6' : add();break; /*添加成绩*/case'7' : delscore();break; /*删除成绩*/case'8' : savescore();break; /*保存成绩*/case'9' :exit(0); break; /*退出程序*/default : printf("输入有误\n");}printf("按任意键继续\n");getch();menu();}while (flag==1);}void menu(void){system("cls"); //清屏printf("\n");printf(" *********欢迎进入学生会成绩管理系统**************\n");printf(" 菜单\n");printf(" 输入成绩-------------------------------------1\n");printf(" 查看成绩及成绩排序---------------------------2\n");printf(" 查询学生成绩---------------------------------3\n");printf(" 成绩统计-------------------------------------4\n");printf(" 修改成绩-------------------------------------5\n");printf(" 添加成绩-------------------------------------6\n");printf(" 删除成绩-------------------------------------7\n");printf(" 保存成绩-------------------------------------8\n");printf(" 退出系统-------------------------------------9\n");printf(" ***********************************************\n");printf(" 请输入您的选择(1~9)\n");}/***************输入各个同学的学生信息******************************/void inputscore(void){int i,j;system("cls");printf(" 已经转到输入成绩菜单\n");printf("请输入学生总数:\n");scanf("%d",&n);printf("提示:输入学号时请输入由1位大写字母和8位数字组成的学号,如P0*******\n");/*因二维表上下需对正故有此要求*/for(i=0;i<n;i++){printf("\n");printf("请输入第%d位学生的学号:\n",i+1);scanf("%s",stu[i].number);printf("姓名:\n");scanf("%s",stu[i].name);printf("请输入学生成绩:\n");printf("出勤分\t值班分\t贡献分\n");for(j=0;j<M;j++)scanf("%f",&stu[i].score[j]);}printf(" 成功输入(按任意键继续后请输入8进行保存)\n");}/*****************计算各个同学的总分*****************************/void total(void){int i,j;for(i=0;i<n;i++){stu[i].total=0;for(j=0;j<M;j++){stu[i].total+=stu[i].score[j];}}}/*****************计算各个同学的平均分*****************************/void avergescore(void){int i,j;for(i=0;i<n;i++){stu[i].aver=0;for(j=0;j<M;j++){stu[i].aver+=stu[i].score[j];}stu[i].aver=stu[i].aver/M;}}/************查看学生成绩及根据平均分对学生进行排序*********************/ void lookscore(void){int i,j,k;STU t;total();avergescore();system("cls");printf(" 已经转到查看成绩及成绩排序菜单\n");for(i=0;i<n-1;i++){for(k=i,j=i+1;j<n;j++)if(stu[j].aver>stu[k].aver)k=j;if(k!=j){t=stu[k];stu[k]=stu[i];stu[i]=t;}}printf("名次\t学号\t\t姓名\t\t出勤分\t值班分\t贡献分\t总分\t平均分\n");for(i=0;i<n;i++){printf("%d\t%s\t%s\t",i+1,stu[i].number,stu[i].name);for(j=0;j<M;j++)printf("%4.2f\t",stu[i].score[j]);printf("%4.2f\t",stu[i].total);printf("%4.2f",stu[i].aver);printf("\n");}}/*****************通过输入学号查找学生成绩***************************/ void searchscore(void){char a[10];int i,j;system("cls");printf(" 已经转到查询学生成绩菜单\n");printf("请输入需查询的学生学号\n");scanf("%s",a);for(i=0;i<n;i++){if(strcmp(a,stu[i].number)==0){printf("名次\t学号\t\t姓名\t\t出勤分\t值班分\t贡献分\t总分\t平均分\n");printf("%d\t%s\t%s\t",i+1,stu[i].number,stu[i].name);for(j=0;j<M;j++)printf("%4.2f\t",stu[i].score[j]);printf("%4.2f\t",stu[i].total);printf("%4.2f",stu[i].aver);printf("\n");break; /*找到该学生成绩信息后跳出for循环*/ }elseprintf("未找到该学生信息\n");}}/*******统计学生成绩信息,平均分及格率,优秀率****************/void statistic(void){STU *p=stu;int i;float count=0.0,sum=0.0;system("cls");printf(" 已经转到成绩统计菜单\n");for(i=0;i<n;i++){sum+=(p+i)->aver;}printf("该学生会平均分为%4.2f\n",sum/n); /*平均分计算*/for(i=0;i<n;i++){if((p+i)->aver>=60)count++;}printf("该学生会及格率为%4.2f%%\n",count/n*100); /*及格率计算*/count=0.0;for(i=0;i<n;i++){if((p+i)->aver>=90)count++;}printf("该学生会优秀率为%4.2f%%\n",count/n*100); /*优秀率计算*/printf("平均分低于60的学生会成员名单\n");for(i=0;i<n;i++){if(stu[i].aver<60)printf("%s\n",stu[i].name);}/*统计不及格学生名单*/}/***************修改学生成绩*****************/void modify(void){char a[10];int i,j;system("cls");printf(" 已经转到修改成绩菜单\n");printf("请输入需要修改成绩的学生学号\n");scanf("%s",a);for(i=0;i<n;i++){if(strcmp(a,stu[i].number)==0){printf("名次\t学号\t\t姓名\t\t出勤分\t值班分\t贡献分\t总分\t平均分\n");printf("%d\t%s\t%s\t",i+1,stu[i].number,stu[i].name);for(j=0;j<M;j++)printf("%4.2f\t",stu[i].score[j]);printf("%4.2f",stu[i].total);printf("%4.2f",stu[i].aver);printf("\n");printf("请重新输入该学生的学号:\n");scanf("%%s",stu[i].number);printf("姓名:\n");scanf("%s",stu[i].name);printf("请重新输入学生成绩:\n");printf("出勤分\t值班分\t贡献分\n");for(j=0;j<M;j++)scanf("%f",&stu[i].score[j]);/*找到该学生成绩后进行修改,跳出for循环*/ printf("修改成功\n");break;}elseprintf("请确认该学生是否为学生会学生!\n");}}/*****************添加学生成绩********************/void add(void){int a,i,j;system("cls");printf(" 已经转到添加成绩菜单\n");printf("请输入新增加的学生人数:\n");scanf("%d",&a);n=n+a;for(i=n-a;i<n;i++){printf("\n");printf("请输入第%d位学生的学号:\n",i+1);scanf("%s",stu[i].number);printf("姓名:\n");scanf("%s",stu[i].name);printf("请输入学生成绩:\n");printf("出勤分\t值班分\t贡献分\n");for(j=0;j<M;j++)scanf("%f",&stu[i].score[j]);printf("添加成功\n");}}/*******************删除学生成绩*************************/void delscore(void){int i,j,c;char m,a[10];system("cls");printf(" 已经转到删除成绩菜单\n");printf("请输入学生学号\n");scanf("%s",a);for(i=0;i<n;i++){if(strcmp(a,stu[i].number)==0){printf("名次\t学号\t\t姓名\t\t出勤分\t值班分\t贡献分\t总分\t平均分\n");printf("%d\t%s\t%s\t",i+1,stu[i].number,stu[i].name);for(j=0;j<M;j++)printf("%4.2f\t",stu[i].score[j]);printf("%4.2f\t",stu[i].total);printf("%4.2f",stu[i].aver);printf("\n");c=i;break;}elseprintf("未找到该学生信息\n");}printf("是否删除该学生成绩(y/n)\n");scanf("%s",&m);if(m=='y'){for(i=c;i<n-1;i++)stu[i]=stu[i+1]; /*结构体整体赋值将后一位学生成绩信息拷贝进入前一位学生信息的存储位置*/n=n-1; /*删除该学生信息后学生总数减一*/printf("删除成绩成功\n");}elseprintf("删除成绩失败\n");}/******************保存学生成绩************************/void savescore(void){FILE *fp;int i,flag=1;char m;system("cls");printf(" 已经转到保存成绩菜单\n");puts("是否保存学生成绩(y/n)");scanf("%s",&m);if(m=='y'){if((fp=fopen("score.dat","wb"))==NULL){printf("文件打开失败\n");return;}for(i=0;i<n;i++)if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1){printf("保存失败\n");flag=0;}if(flag==1)printf("保存成功!\n");fclose(fp);}elsereturn;}。
C语言课程设计_学生成绩管理系统
部署步骤:安装 操作系统、安装 数据库、安装应 用软件等
维护方案:定期 备份数据、定期 检查系统、定期 更新软件等
系统维护方案
定期备份数据: 确保数据安全, 防止数据丢失
定期更新系统: 确保系统安全, 防止病毒和恶意 软件攻击
定期检查硬件: 确保硬件正常运 行,防止硬件故 障
定期培训员工: 确保员工熟悉系 统操作,提高工 作效率
06 系统测试与优化
单元测试
目的:验证单个模块或功能的正确 性
测试内容:功能测试、性能测试、 兼容性测试、安全性测试
添加标题
添加标题
添加标题
添加标题
测试方法:白盒测试、黑盒测试、 灰盒测试
测 试 工 具 : JU n it 、 Te s t NG 、 Selenium等
集成测试
目的:验证系统各模块间的接口和交互是否正常 测试方法:黑盒测试、白盒测试、灰盒测试 测试内容:功能测试、性能测试、安全测试、兼容性测试 测试工具:JMeter、Selenium、Appium等
系统性能优化
性能测试:使用自 动化工具进行性能 测试,如JMeter、 LoadRunner等
性能瓶颈分析:分 析性能测试结果, 找出性能瓶颈,如 数据库查询、网络 延迟等
性能优化:针对性 能瓶颈进行优化, 如优化数据库查询 、减少网络延迟等
性能监控:建立性 能监控体系,实时 监控系统性能,及 时发现和解决性能 问题
学生成绩管理系统是一个用 于管理学生成绩的软件系统
Байду номын сангаас
系统采用模块化设计,易于 维护和扩展
系统支持多种数据格式,如 Excel、CSV等,方便数据
导入和导出
系统目标
提高学生成绩管理效率 方便教师查询、统计和分析学生成绩 提供个性化学习建议和指导 促进家校沟通,提高家长对学生成绩的了解
C语言课程设计报告(学生成绩管理系统)
C语言课程设计报告:学生成绩管理系统系统需求一、当前学生信息:通过结构体struct student 来保存学生的姓名,学号,性别,语文,数学,英语和计算机等等相关信息,并且通过cin函数来进行给当前学生输入初始信息。
二、学生成绩查询: 输入一个学号,在文件中查找此学生, 若找到则输出此学生的全部信息和成绩;若找不到则输出查找失败的信息。
同时也可以全部把各科的平均成绩,最高和最低分输出.三、新生插入:通过给该生的学号来和原班上的学生的学号比较大小,若大就在后,若小则靠前排,将此生的信息保存下来.四、输出全部学生信息和全部学生成绩。
五、退出系统.六、附加说明:系统将来完善的功能有:可以通过性别来模糊查询,也可以通过姓名的姓来先进行模糊查询,以便后面精确查找。
总体设计一、仔细阅读系统要求,首先将此系统化分为如下模块(即如下函数)1、输入初始的学生信息:其中包括学生的姓名、学号和性别以及学生的语文、数学、英语和计算机等相关信息;可用函数cin(stu *p1)来实现此操作。
2、查询模块:可用stu *lookdata(stu *p1)来实现。
找到就输出此学生全部信息包括学生的语文、数学、英语和计算机等的成绩。
3、插入模块:可用insert( )函数来实现。
其中通过学号的大小来比较的,并且以此来排序.4、输出学生的信息以及成绩:通过学生的姓名来查看学生的语文、数学、英语和计算机等相关成绩,同时也可以分别通过caverage()、maverage()、eaverage() 和comaverage() 来输出语文、数学、英语和计算机等成绩的平均分数、最高和最低分数。
5、退出系统:可用一个函数exit()来实现,首先将信息保存到文件中,释放动态创建的内存空间,再退出此程序。
二、系统主模块结构图:详细设计一、界面设计此系统界面采用图形和数字化菜单设计。
主界面设计如下:学生成绩管理系统请选择相应的数字执行相应的功能:1:是否输入其他数据2:查看数据3:插入数据4:查找数据5:更新数据6:保留数据7:显示或打印数据8:语文成绩状况9:数学成绩状况10:英语成绩状况11:计算机成绩状况12:?13:退出系统二、数据结构设计:程序设计中用到的结构体类型:学生信息结构体类型:typedef struct student{char name[MAX];int num[MAX];char sex[MAX];int chinese;int mathematic;int english;int computer;struct student *next;}程序代码://原始密码是123456#include"stdio.h”#include"stddef.h"#include"stddef。
C语言写的学生成绩管理系统(链表)
#include<stdio.h>#include<string.h>#include<stdlib.h>struct stud{long num;char name[20];float sx;float dx;float ts;float dl;float cx;float zf;float pj;};struct studcode{struct stud student;struct studcode *next;};void menu();void input(struct studcode **);void output(struct studcode *);void binsearch(struct studcode *);void insert(struct studcode **);void delet(struct studcode **);void good(struct studcode *);void fail(struct studcode *);void sort(struct studcode *);void back();void main(){char choose;int flag=1;struct studcode *head;head=NULL;printf("请先录入学生成绩信息\n");printf("输入学生学号姓名高数、英语读写、英语听说、计算机导论和程序设计的成绩\n");input(&head);while (flag){system("cls");menu();printf("请选择:");getchar();choose=getchar();switch(choose){case '1':output(head);back();break;case '2':binsearch(head);back();break;case '3':insert(&head);output(head);back();break;case '4':delet(&head);output(head);back();break;case '5':good(head);back();break;case '6':fail(head);back();break;case '7':sort(head);output(head);back();break;case '0':flag=0;printf("\n *** The End! ***\n");printf("\n ####感谢使用,欢迎再次登录,拜拜!####\n");break;default: printf("\n Wrong Selection !(选择错误,请重选)\n");back();}}}void menu(){printf(" \n 学生成绩统计与分析系统\n");printf(" \n 菜单\n\n");printf(" \n 1. 显示所有学生的信息\n");printf(" \n 2. 查找某学号的学生信息\n");printf(" \n 3. 插入某学生的信息 \n");printf(" \n 4. 删除某学号学生的信息\n");printf(" \n 5. 统计各门课程成绩在90分以上学生所占百分比\n");printf(" \n 6. 统计各门课程成绩在60分以下学生所占百分比 \n");printf(" \n 7. 按总分降序排序,依高低排出名次 \n");printf(" \n 0. 退出 \n\n");}void back(){int x;printf("\n");do{printf("按1返回菜单界面:");scanf("%d",&x);}while(x!=1);}void input(struct studcode **headp){struct studcode *p;while(1){p=(struct studcode *)malloc(sizeof(struct studcode));scanf("%ld",&p->student.num);if(p->student.num==0) break;scanf("%s%f%f%f%f%f",&p->,&p->student.sx,&p->student.dx,&p->stu dent.ts,&p->student.dl,&p->student.cx);p->student.zf=p->student.sx+p->student.dx+p->student.ts+p->student.dl+p->st udent.cx;p->student.pj=p->student.zf/5;p->next=*headp;*headp=p;}}void output(struct studcode *head){struct studcode *p;p=head;printf("学号\t姓名\t高数\t读写\t听说\t导论\t程序\t总分\t平均分\n");while(p!=NULL){printf("%-ld\t%-4s\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\ n",p->student.num,p->,p->student.sx,p->student.dx,p->student.ts,p-> student.dl,p->student.cx,p->student.zf,p->student.pj);p=p->next;}printf("\n");}void binsearch(struct studcode *head){struct studcode *p;int k=1;long x;p=head;printf("请输入需要查找的学生的学号:");scanf("%ld",&x);printf("\n");while(p!=NULL){if(p->student.num==x){printf("该学生信息如下:\n");printf("学号\t姓名\t高数\t读写\t听说\t导论\t程序\t总分\t平均分\n");printf("%-ld\t%-4s\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\n",p ->student.num,p->,p->student.sx,p->student.dx,p->student.ts,p->student.dl,p->stude nt.cx,p->student.zf,p->student.pj);k=0;break;}p=p->next;}if(k) printf("没有此学生的信息\n");}void insert(struct studcode **headp){struct studcode *p;p=(struct studcode *)malloc(sizeof (struct studcode));printf("请输入你想插入的学生的信息\n");scanf("%ld%s%f%f%f%f%f",&p->student.num,&p->,&p->student.sx,&p->student.dx,&p->student.ts,&p->student.dl,&p->student.cx);p->student.zf=p->student.sx+p->student.dx+p->student.ts+p->student.dl+p->st udent.cx;p->student.pj=p->student.zf/5;p->next=*headp;*headp=p;printf("*****插入成功*****\n");}void delet(struct studcode **headp){struct studcode *p,*last;long x;p=*headp;printf("请输入你要删除的学生的学号:");scanf("%ld",&x);while(p->student.num!=x&&p->next!=NULL){last=p;p=p->next;}if(p->student.num==x){if(p==*headp)*headp=p->next;elselast->next=p->next;free(p);printf("\n*****删除成功*****\n");}else printf("\n***删除失败,无该学生信息***\n");}void good(struct studcode *head){struct studcode *p;int x1,x2,x3,x4,x5,k;float y1,y2,y3,y4,y5;x1=x2=x3=x4=x5=k=0;p=head;while(p!=NULL){k++;if(p->student.sx>=90) x1++;if(p->student.dx>=90) x2++;if(p->student.ts>=90) x3++;if(p->student.dl>=90) x4++;if(p->student.cx>=90) x5++;p=p->next;}y1=(float)x1/k;y2=(float)x2/k;y3=(float)x3/k;y4=(float)x4/k;y5=(float)x5/k;printf("高数\t读写\t听说\t导论\t程序\n");printf("%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\n",y1,y2,y3,y4,y5); }void fail(struct studcode *head){struct studcode *p;int x1,x2,x3,x4,x5,k;float y1,y2,y3,y4,y5;x1=x2=x3=x4=x5=k=0;p=head;while(p!=NULL){k++;if(p->student.sx<60) x1++;if(p->student.dx<60) x2++;if(p->student.ts<60) x3++;if(p->student.dl<60) x4++;if(p->student.cx<60) x5++;p=p->next;}y1=(float)x1/k;y2=(float)x2/k;y3=(float)x3/k;y4=(float)x4/k;y5=(float)x5/k;printf("高数\t读写\t听说\t导论\t程序\n");printf("%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\n",y1,y2,y3,y4,y5); }void sort(struct studcode *head){struct stud temp;int i,j,n;struct studcode *p,*p1,*p2;n=0;p=head;while(p!=NULL){n++;p=p->next;}for(p1=head,i=0;i<n-1;i++,p1=p1->next)for(p2=p1->next,j=i+1;j<n;j++,p2=p2->next)if(p1->student.zf<p2->student.zf){temp=p2->student;p2->student=p1->student;p1->student=temp;}printf("\n*****排序成功*****\n"); }。
学生成绩管理系统C语言版
1、2、编一程序,能计算每个学生的总分和平均分。
3、编一程序,能按输入要求打印各门课程的最高分和最低分的同学。
4、编一程序,能将五个学生的成绩按总分进行降序排序。
5、编一程序,能删除一个学生的记录;6、编一程序,能增加一个学生的记录;建立一个菜单模式的学生信息管理系统,完成功能如下:一、建立主菜单*****学生信息管理系统*****1、输入学生信息2、输出学生信息3、计算每个同学成绩的总分与平均分4、对学生成绩进行排序5、输出每门功课最高分的同学信息6、输出每门功课最低分的同学信息7、退出系统主菜单界面:二、将综合练习一中的程序改写为子程序并能通过主菜单进行调用。
先上图开发环境windows 7,vc 6.0 开始贴代码:/*************** 张海山* 10软件2班* 安庆职业技术学院* QQ:136533295******************/#include"stdio.h"#include"stdlib.h"#include"malloc.h"#include"string.h"typedef struct lode{int id;char name[20];char sex[10];int score[4];struct lode *next;}lode,*linklist;linklist input(linklist head)//输入学生信息{char cmd='y';int t,i,l;char name[10];char sex[2];int score[3]={0};//int sum;linklist p;while(cmd=='y'||cmd=='Y'){p=(linklist)malloc(sizeof(lode));printf("请输入学生的编号\n");fflush(stdin);scanf("%d",&t);p->id=t;printf("请输入学生的姓名:\n");fflush(stdin);scanf("%s",p->name);/* l=strlen(p->name);p->sex[l]='\0';/* for(i=0;i<l;i++){p->name[i]=name[i];}*/printf("请输入学生的性别:\n");fflush(stdin);scanf("%s",p->sex);/* l=strlen(p->sex);p->sex[l]='\0';/* for(i=0;i<l;i++){p->sex[i]=sex[i];}*/fflush(stdin);printf("请依次输入学生的三门课成绩:\n");scanf("%d",&score[0]);p->score[0]=score[0];fflush(stdin);scanf("%d",&score[1]);p->score[1]=score[1];fflush(stdin);scanf("%d",&score[2]);p->score[2]=score[2];fflush(stdin);p->next=head->next;head->next=p;printf("是否继续(y)&返回主菜单(n) y&n\n");fflush(stdin);scanf("%c",&cmd);}return head;}linklist print(linklist head){linklist p;int i=1;p=head->next;printf("\t序号\t姓名\t性别\t英语\t数学\t语文\n");while(p!=NULL){printf("\t%d\t%s\t%s\t%d\t%d\t%d\n",p->id,p->name,p->sex,p->score[0],p->score[1],p->sco re[2]);p=p->next;/*if(p==NULL)break;printf("%d\n",i);*/}//printf("%d\n",i);//printf("i=%d\n",i);return 0;}void avg(linklist head){int sum=0;double avg=0;linklist p;p=head->next;while(p!=NULL){sum=0;sum=p->score[1]+p->score[2]+p->score[0];avg=sum/3;printf("%s的总分为:%d\t平均分为:%.2lf\n",p->name,sum,avg);p=p->next;}}void maxmin(linklist head){linklist p;intmax1=0,max1index,min1=head->next->score[0],min1index,max2=0,max2index,min2=head->nex t->score[1],min2index,max3=0,max3index,min3=head->next->score[2],min3index;p=head->next;while(p!=NULL){if(max1<(p->score[0])){max1=p->score[0];max1index=p->id;}if(min1>=(p->score[0])){min1=p->score[0];min1index=p->id;}if(max2<(p->score[1])){max2=p->score[1];max2index=p->id;}if(min2>=(p->score[1])){min2=p->score[1];min2index=p->id;}if(max3<(p->score[2])){max3=p->score[2];max3index=p->id;}if(min3>=(p->score[2])){min3=p->score[2];min3index=p->id;}p=p->next;}printf("英语:\n");p=head->next;while(p!=NULL){if((p->id)==max1index)printf("英语最高分为:%d\t姓名为:%s\n",p->score[0],p->name);if((p->id)==min1index)printf("英语最低分为:%d\t姓名为:%s\n",p->score[0],p->name);p=p->next;}printf("数学:\n");p=head->next;while(p!=NULL){if((p->id)==max2index)printf("数学最高分为:%d\t姓名为:%s\n",p->score[1],p->name);if((p->id)==min2index)printf("数学最低分为:%d\t姓名为:%s\n",p->score[1],p->name);p=p->next;}printf("语文:\n");p=head->next;while(p!=NULL){if((p->id)==max3index)printf("语文最高分为:%d\t姓名为:%s\n",p->score[2],p->name);if((p->id)==min3index)printf("语文最低分为:%d\t姓名为:%s\n",p->score[2],p->name);p=p->next;}}void rank(linklist head){linklist p;int i=0,j,k,n=0;int sum[100];p=head->next;while(p!=NULL){n++;sum[i]=p->score[1]+p->score[2]+p->score[0];i++;p=p->next;}printf("n=%d\n",n);for(i=1;i<6;i++){for(j=0;j<6-i;j++)if(sum[j]<sum[j+1]){k=sum[j];sum[j]=sum[j+1];sum[j+1]=k;}}printf("\t序号\t姓名\t性别\t英语\t数学\t语文\n");for(i=0;i<n;i++){p=head->next;while(p!=NULL){if(sum[i]==(p->score[1]+p->score[2]+p->score[0])){printf("\t%d\t%s\t%s\t%d\t%d\t%d\n",p->id,p->name,p->sex,p->score[0],p->score[1],p->sco re[2]);break;}p=p->next;}}}void add(linklist head){linklist p,q;p=head;q=(linklist)malloc(sizeof(lode));printf("请输入要插入学生的序号:\n");fflush(stdin);scanf("%d",&q->id);fflush(stdin);printf("请输入学生的姓名:\n");scanf("%s",q->name);fflush(stdin);printf("请输入学生性别:\n");scanf("%s",q->sex);fflush(stdin);printf("请依次输入学生的三门课成绩:\n");scanf("%d",&q->score[0]);fflush(stdin);scanf("%d",&q->score[1]);fflush(stdin);scanf("%d",&q->score[2]);fflush(stdin);q->next=NULL;while(p->next!=NULL){p=p->next;}p->next=q;//p->next=NULL;}void del(linklist head){linklist p,temp;int j;p=head->next;temp=head;printf("请输入要删除学生记录的序号:\n");scanf("%d",&j);while(p!=NULL){if(p->id!=j){p=p->next;temp=temp->next;}else{temp->next=p->next;free(p);break;}}}void main(){int cmd;linklist head;head=(linklist)malloc(sizeof(lode));head->next=NULL;do{printf("\n\n |***************学生成绩管理程序***************|\n");printf(" |----------------------------------------------|\n");printf(" | |\n");printf(" | 主菜单|\n");printf(" | |\n");printf(" |----------------------------------------------|\n");printf(" | |\n");printf(" | 请输入选择项目:|\n");printf(" | |\n");printf(" | 1、输入学生成绩|\n");printf(" | |\n");printf(" | 2、输出学生成绩|\n");printf(" | |\n");printf(" | 3、计算总成绩、平均成绩|\n");printf(" | |\n");printf(" | 4、求最高分、最低分|\n");printf(" | |\n");printf(" | 5、排序|\n");printf(" | |\n");printf(" | 6、增加记录|\n");printf(" | |\n");printf(" | 7、删除记录|\n");printf(" | |\n");printf(" | 0、退出系统|\n");printf(" | |\n");printf(" |----------------------------------------------|\n");scanf("%d",&cmd);switch(cmd){case 0:break; //退出系统case 1: input(head);break; //输入学生信息case 2: print(head);break; //输出学生信息case 3: avg(head);break; //求总成绩、平均数case 4: maxmin(head);break; //最高分case 5: rank(head);break; //排序case 6: add(head);break; //增加记录case 7: del(head);break; //删除记录default :printf("您输入错误!\n");}}while(cmd!=0);}因为是C语言版的要严格按照样子输入哦要不然就会出现不可预料的结果。
c语言案例 学生成绩管理系统
课题:学生成绩管理系统 成员:
功能简介
1 增加新生 2 信息查询 3 求每个学生的平均成绩 4 输出每个学生平均成绩的排名情况 5 查看成绩统计
欢迎界面
使用说明
1 输入学生成绩 2 输出学生成绩 3查询学生成绩 4 修改学生成绩 5 查看成绩排序 6 查看成绩统计 7 保存数据 8 读取数据 9 退出系统
输入学生成绩
输入学生的学号,班级,姓名,专业,性别,计算机成绩名,班级,专业进行查询
求每个学生的平均成绩
直接到欢迎界面选择代码就可以
求学生的平均成绩排名
求各个学生平均成绩的排名情况
学生成绩统计
统计学生的各科成绩与平均成绩,此时不 排序
退出系统
C语言课程设计学生成绩管理系统
PART THREE
学生信息包括:姓名、学号、性别、班级、成绩等 学生信息录入方式:手动输入、文件导入、数据库查询等 学生信息录入界面设计:简洁明了,易于操作 学生信息录入注意事项:确保信息准确无误,避免重复录入
查询结果:显示学生的基本 信息、成绩、课程等信息
系统故障分类:硬件故障、软件故障、网络故障等 故障处理流程:发现故障、分析原因、采取措施、恢复系统 应急预案:制定应急预案、定期演练、及时更新 数据备份与恢复:定期备份数据、灾难恢复计划
汇报人:
,a click to unlimited possibilities
汇报人:
CONTENTS
PART ONE
PART TWO
目标:实现学 生成绩的高效
管理
功能:学生信 息管理、成绩 录入、成绩查 询、成绩统计、 成绩分析、成
绩排名等
系统用户:学生、教师、管理员
权限设置:学生只能查看自己的成绩,教师可以查看和管理所有学生的成绩,管理员可以管理所有用户和权限
查询和报表的界面设计:简 洁明了,易于操作
查询和报表的数据处理:高效、 准确,保证数据的一致性和完 整性
PART SIX
数据备份:定期备份数据,防止数据丢失 数据恢复:在数据丢失或损坏时,能够快速恢复数据 备份策略:制定合理的备份策略,确保数据的完整性和一致性 备份工具:使用专业的备份工具,提高备份效率和可靠性
删除方式:通过学生ID进行 删除
删除条件:学生信息存在且 未被删除
删除操作:在数据库中执行 删除语句
删除结果:学生信息从数据库 中被删除,系统提示删除成功
PART FOUR
学生成绩管理系统基本C语言编写
//代码版权所有,不要#include "stdio.h" #include "stdlib.h" #include "string.h"#include "conio.h" copy,仅供参考学习。
//标准输入输出函数库//标准函数库//字符串函数库//屏幕操作函数库#definep->data.num,p->,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.total,p->data.a ve,p->data.mingciint saveflag=0; //是否需要存盘的标志变量//定义与学生有关的数据结构typedef structstudent {char num[12]; charname[15]; intcgrade; intmgrade; integrade; int total;float ave; intmingci;}sqlist;//定义每条记录或结点的数据结构,标记为:nodetypedef struct node{struct student data;// 数据域struct node *next; //指针域}Node,*Link; //Node 为node 类型的结构变量,*Link 为node 类型的指针变量void menu() //主菜单{system("cls"); //调用DOS 命令,清屏.与clrscr() 功能相同printf(" \n");printf(" 学生成绩管理信息系统主菜单\n\n");printf(" **************************************************\n");printf(" $ 1、添加记录6、统计记录$\n");printf(" $ 2、删除记录7、排序记录$\n");#define HEADER1 " ***************************学生成绩信息****************************** \n\n"#define HEADER2 " 学号姓名计算机数学英语总分平均分名次\n\n"#define FORMAT " %-10s %-10s %5d %5d %5d %5d %.3f %4d \n" DATA//标记为student//学号//姓名//计算机成绩//数学成绩//英语成绩//总分//平均分//名次}void printheader() // 格式化输出表头{printf(HEADER1);printf(HEADER2);}void printdata(Node *pp) // 格式化输出表中数据{Node* p; p=pp;printf(FORMA T,DA TA);}void Wrong()//输出按键错误信息{printf("\n\n\n\n\n**********Error: 输入错误 !请按任意键继续 !!**********\n"); getchar();}void Nofind()//输出未查找此学生的信息{ printf("\n=====> 未查找此学生的信息 !\n");}void Disp(Link l)//显示单链表 l 中存储的学生记录,内容为 student 结构中定义的内容{Node *p;p=l->next; //l 存储的是单链表中头结点的指针,该头结点没有存储学生信 息,指针域指向的后继结点才有学生信息if(!p) //p==NULL,NUll 在 stdlib 中定义为 0 {printf("\n=====> 无学生的记录 !\n"); getchar(); return;}printf("\n\n"); printheader(); while(p) //逐条输出链表中存储的学生信息{printdata(p); p=p->next;// 移动直下一个结点}getchar(); getchar();}/*作用:用于定位链表中符合要求的节点,并返回指向该节点的指针参数: findmess[] 保存要查找的具体内容 ; nameornum[] 保存按什么查找 ;在单链表 l 中查找 ;*/printf(" $3、 查找记录 8、 保存记录$\n"); printf(" $4、 修改记录 9、 显示记录 $\n"); printf("$5、 插入信息 0、 退出系统 $\n");printf("************************************************ **\n");//输出表格头部Node* Locate(Link l,char findmess[],char nameornum[]){Node *r; if(strcmp(nameornum,"num")==0) //按学号查询{r=l->next;while(r){ if(strcmp(r->data.num,findmess)==0) //若找到findmess 值的学号return r;r=r->next;}}else if(strcmp(nameornum,"name")==0) //按姓名查询{r=l->next;while(r){ if(strcmp(r->,findmess)==0) // 若找到findmess 值的学生姓名return r;r=r->next;}}return 0; // 若未找到,返回一个空指针}//输入字符串,并进行长度验证(长度<lens) void stringinput(char *t,int lens,char *notice) { char n[255]; doprintf(notice); //显示提示信息scanf("%s",n); //输入字符串if(strlen(n)>lens)printf("\n 超出长度范围,重新输入! \n"); // 进行长度校验,超过lens 值重新输入}while(strlen(n)>lens);strcpy(t,n); // 将输入的字符串拷贝到字符串t 中}//输入分数,0< =分数< =100)int numberinput(char *notice){int t=0;do{printf(notice); //显示提示信息scanf("%d",&t); //输入分数if(t>100 || t<0)printf("\n 分数必须在0到100之间! \n"); //进行分数校验}while(t>100 || t<0);return t;}//增加学生记录void Add(Link l){Node *p,*r,*s; //实现添加操作的临时的结构体指针变量char ch,flag=0,num[12];r=l;s=l->next;system("cls");Disp(l); //先打印出已有的学生信息while(r->next!=NULL)r=r->next; //将指针移至于链表最末尾,准备添加记录while(1) //一次可输入多条记录,直至输入学号为0 的记录结点添加操作{while(1) //输入学号,保证该学号没有被使用,若输入学号为0,则退出添加记录操作stringinput(num,12,"\n输入学号(按“0”返回菜单!):"); //格式化输入学号并检验flag=0; if(strcmp(num,"0")==0) // 输入为0,则退出添加操作,返回主界面{return;}s=l->next;while(s) //查询该学号是否已经存在,若存在则要求重新输入一个未被占用的学号{ if(strcmp(s->data.num,num)==0) {flag=1; break;} s=s->next;}if(flag==1) //提示用户是否重新输入{ getchar(); printf("=====> 学号%s 存在,重试?(y/n):",num); scanf("%c",&ch);if(ch=='y'||ch=='Y') continue;elsereturn;}else{ break;}}p=(Node *)malloc(sizeof(Node)); //申请内存空间if(!p){printf("\n 内存空间申请失败! "); // 如没有申请到,打印提示信息return ; //返回主界面} strcpy(p->data.num,num); //将字符串num 拷贝到p->data.num 中stringinput(p->,15," 姓名:");p->data.cgrade=numberinput(" 计算机[0-100]:"); // 输入并检验分数,分数必须在0-100 之间p->data.mgrade=numberinput(" 数学[0-100]:"); //输入并检验分数,分数必须在0-100 之间p->data.egrade=numberinput(" 英语[0-100]:"); //输入并检验分数,分数必须在0-100 之间p->data.total=p->data.egrade+p->data.cgrade+p->data.mgrade; // 计算总分p->data.ave=(float)(p->data.total/3); //计算平均分p->data.mingci=0;r->next=p; // 将新建的结点加入链表尾部中p->next=NULL; // 表明这是链表的尾部结点r=p;saveflag=1;}return ;}//按学号或姓名,查询学生记录void Qur(Link l){int select; //1: 按学号查,2:按姓名查,其他:返回主界面(菜单)char searchinput[20]; //保存用户输入的查询内容Node *p;if(!l->next) //若链表为空{system("cls"); printf("\n=====> 无此学生的记录!\n"); getchar();return;}system("cls");printf("\n =====>1 按学号查询=====>2 按名字查询\n");printf(" 请选择[1,2]:");scanf("%d",&select);if(select==1) //按学号查询{stringinput(searchinput,12," 请输入现有学生的学号:"); p=Locate(l,searchinput,"num");// 在l 中查找学号为searchinput 值的节点,并返回节点的指针if(p){ printheader(); printdata(p); printf(" 按任意键返回!");getchar();}elseNofind(); getchar();}else if(select==2) //按姓名查询{stringinput(searchinput,15," 请输入现有学生的姓名:"); p=Locate(l,searchinput,"name");if(p){ printheader(); printdata(p);printf(" 按任意键返回!"); getchar();}elseNofind(); getchar();}elseWrong();getchar();}//删除学生记录:先找到保存该学生记录的节点,然后删除该节点void Del(Link l){int sel;Node *p,*r;char findmess[20]; if(!l->next){system("cls");printf("\n=====> 无此学生记录!\n");getchar();return;} system("cls");Disp(l);printf("\n =====>1 按学号删除=====>2 按姓名删除\n");printf(" 请选择[1,2]:");scanf("%d",&sel);if(sel==1){stringinput(findmess,12," 请输入现有学生的学号:"); p=Locate(l,findmess,"num");if(p){r=l;while(r->next!=p)r=r->next;r->next=p->next; //将p 所指节点从链表中去除free(p); //释放内存空间printf("\n=====> 删除成功!\n");getchar(); saveflag=1;}elseNofind();getchar();}else if(sel==2) //先按姓名查询到该记录所在的节点{stringinput(findmess,15," 请输入现有学生的姓名"); p=Locate(l,findmess,"name");if(p){r=l;while(r->next!=p)r=r->next;r->next=p->next;free(p); printf("\n=====> 删除成功!\n"); getchar();saveflag=1;}elseNofind(); getchar();}elseWrong();getchar();}}//修改学生记录。
C语言学生系统增、删、排序、查功能
题目学生成绩管理系统某班学生有若干人(不超过40人),期末共考5门课,每个学生的成绩按学号顺序存入计算机。
学生信息如下表所示:设计一个程序,实现学生成绩管理功能。
1、提供菜单式的用户界面;2、输入学生的基本信息(应考虑学生学号的唯一性);3、增加或删除学生记录;4、输入姓名或学号,查找某个学生的成绩;5、统计某门课程在100-90,89-80,79-70,69-60,60分以下各分数段人数并显示;6、对学生成绩按总分排序,并将排序结果输出7、使用文件记载学生信息,程序启动时加载学生信息,程序退出时保存学生信息。
(进一步功能)要求:1、用C语言实现程序设计;2、系统的各个功能模块要求用函数的形式实现;3、界面友好(良好的人机交互),程序加必要的注释。
三.需求分析1.建立一个学生管理系统,包括姓名、学号、高等数学成绩、大学英语读写成绩、大学英语听说成绩、计算机科学导论成绩、程序设计基础(一)成绩。
2.建立一个链表保存学生的信息。
3.设计一个input()函数,输入所有学生的信息。
4.设计一个output()函数,输出所有学生的信息。
5.设计一个insert()函数,把新学生的信息插入到连表中。
6.设计一个del()函数,根据输入的学号,删除相应的学生信息。
7.设计一个search()函数,根据输入的学号,输出相应的学生信息。
8.设计一个sort()函数,根据总分成绩对学生进行排序。
9.设计一个save()函数,将学生信息保存到“陈原彬.txt”中。
10.该程序有报错机制,出现错误,会执行exit(0)函数,退出程序。
四.详细设计1、程序包括7个函数:input()、output()、insert()、del()、search()、sort()、save(),分别进行输入、输出、添加、删除、查找、排序和保存到文件。
菜单图图如下:2、数据定义为:struct student{char name[20];char num[20];int math; //高等数学int English_rw; //大学英语读写int English_ls; //大学英语听说int dl; //计算机导论int pdb; //程序设计基础struct student * next;};3、建立链表函数:node * input(node * head) 功能:建立链表,向链表中输入信息4、显示链表函数:void output(node * head)功能:显示链表中的内容5、添加节点函数:node * insert(node * head) 功能:向链表中插入一条记录6、删除节点函数:node * del(node * head)功能:按照学号方式删除一条记录7、查找节点函数:node * search(node * head)功能:按照学号的方式对学生信息进行查找,并将该信息输出8、节点排序函数:node * sort(node * head)功能:按照总分的方式对链表中的节点进行排序9、保存到文件函数:node * save(node * head)功能:将链表中各记录的内容保存到指定文件中.源程序#include<stdio.h>#include <stdlib.h>#include <string.h>#define N 3#define MAXSIZE 1000struct student{char name[20];char num[20];int math; //高等数学int English_rw; //大学英语读写int English_ls; //大学英语听说int dl; //计算机导论int pdb; //程序设计基础struct student * next;};void menuname();typedef struct student node;void sa(int *a,int *b){int temp;temp=*a;*a=*b;*b=temp;}void menuname() /*定义菜单函数*/{printf("\n *****************************功能菜单****************************** \n\n");printf(" \n 输入学生信息--1 \n");printf(" \n 输出学生信息--2 \n");printf(" \n 添加新的学生--3 \n");printf(" \n 删除某学生信息--4 \n");printf(" \n 查找某学生信息--5 \n");printf(" \n 将学生按总分排序--6 \n");printf(" \n 将学生信息保存到文件中--7 \n");printf(" \n 退出--0 \n");printf(" \n\n");}node * input(node * head) //输入学生信息{node * p,*pri; //定义一个指向链表结构的指针变量int i=0; /*定义一个整形变量i并赋值0*/printf("\n \n ———————————————请输入学生成绩信息:——————————————— \n\n");p=(node *)malloc(sizeof(node)); /*分配存储空间,生成头结点,malloc返回值赋给p*/if(p!=NULL){printf(" 姓名:");getchar();scanf("%s",p->name);printf(" 学号:");scanf("%s",p->num);printf(" 高等数学:");scanf("%d",&(p->math));printf(" 大学英语读写:");scanf("%d",&(p->English_rw));printf(" 大学英语听说:");scanf("%d",&(p->English_ls));printf(" 计算机导论:");scanf("%d",&(p->dl));printf(" 程序设计基础:");scanf("%d",&(p->pdb));p->next =NULL;head=p;pri =p;printf(" \n");for(int i=0;i<N-1;i++){p=(node *)malloc(sizeof(node));printf(" 姓名:");scanf("%s",p->name);printf(" 学号:");scanf("%s",p->num);printf(" 高等数学:");scanf("%d",&(p->math));printf(" 大学英语读写:");scanf("%d",&(p->English_rw));printf(" 大学英语听说:");scanf("%d",&(p->English_ls));printf(" 计算机导论:");scanf("%d",&(p->dl));printf(" 程序设计基础:");scanf("%d",&(p->pdb));pri->next =p;pri = p;pri->next=NULL;printf(" \n");}printf("\n\n");printf("添加信息结束!按2键可查看学生信息!\n\n");return head;}else{printf("out of memory!!!\n");exit(-1);}}void output(node * head) //输出学生信息{node * p; /*定义一个指向链表结构的指针变量*/p=head; /*将head的值赋给p,使p指向head所指的结点*/ if(p==NULL) /*如果头指针为空,则链表为空*/printf("\n 学生信息为空!请先输入或添加学生信息!!!\n\n");else{printf("\n\n --------------- 学生成绩信息-------------- \n\n");while(p!=NULL) /*按链表顺序输出各结点数据域信息*/{printf("姓名学号高等数学大学英语读写大学英语听说计算机导论程序设计基础\n\n");printf("%s\t%s \t%d \t%6d \t%8d \t%7d \t%6d \n",p->name,p->num,p->math,p->English_rw ,p->English_ls ,p->dl ,p->pdb );p=p->next; /*将p->next的值赋给p,使p指向下一结点*/}printf("\n\n");}}node * insert(node * head) /*定义插入函数*/{node * p; /*定义一个指向链表结构的指针变量*/p=(node *)malloc(sizeof(node)); /*分配存储空间,生成新结点,malloc返回值赋给p*/printf("\n\n ——————————请输入新添加的学生信息———————————— \n\n");printf("姓名:"); //输入新结点信息scanf("%s",p->name);printf("学号:");scanf("%s",p->num);printf("高等数学:");scanf("%d",&(p->math));printf("大学英语读写:");scanf("%d",&(p->English_rw));printf("大学英语听说:");scanf("%d",&(p->English_ls));printf("计算机导论:");scanf("%d",&(p->dl));printf("程序设计基础:");scanf("%d",&(p->pdb));p->next=head; /*新结点插入头结点之前*/head=p; /*记录新的头指针*/printf("\n\n");printf(" 添加学生信息成功,按2键可查看! \n\n ");return head; /*返回头指针*/}node * del(node * head) /*定义删除函数*/{node * p1,* p2; /*定义两个指向链表结构的指针变量*/char * num; /*定义一个指向字符的指针变量name*/num=(char *)malloc(sizeof(char)); /*分配字符存储空间,malloc返回值赋给name*/if(head==NULL) /*如果头指针为空,则链表为空*/{printf("\n 成绩系统无信息!请先输入或添加学生信息!\n\n");return NULL; /*返回空指针*/}else{printf("请输入要删除的学生学号:");scanf("%s",num);printf("\n");p1=head; /*将head的值赋给p1,使p1指向head所指的结点*/while(strcmp(p1->num,num)!=0&&p1->next!=NULL)/*如果p1->num不是要删除成员学号并且后面还有结点*/{p2=p1; /*将p1的值赋给p2,使p2指向p1所指,记录p1*/p1=p1->next; /*p1后移一个结点*/}if(strcmp(p1->num,num)==0) /*找到要删除的结点(学号)*/{printf(" ————————您要删除的学生信息为:————————\n\n"); /*输出要删除结点数据域信息*/printf("姓名学号高等数学大学英语读写大学英语听说计算机导论程序设计基础\n");printf("%s\t%s \t%d \t%d \t%3d \t%5d \t%7d \n",p1->name,p1->num,p1->math,p1->English_rw ,p1->English_ls ,p1->dl ,p1->pdb );if(p1==head) /*如果要删除结点是头结点*/head=p1->next; /*则把第2个结点地址赋给head*/ elsep2->next=p1->next; /*否则将下一个结点地址赋给前一结点地址*/printf(" \n 删除成功 ! \n\n ");printf(" 要查看删除后的学生信息请按2! \n\n ");free(p1); /*释放p1所指空间*/}elseprintf(" \n 对不起,删除失败 ! ! !\n\n");}return head; /*返回头指针*/}node * search(node * head) /*定义查找函数*/{node * p; /*定义一个指向链表结构的指针变量p*/char * num; /*定义一个指向字符的字符指针变量name*/num=(char *)malloc(sizeof(char)); /*分配字符存储空间,malloc返回值赋给name*/p=head; /*将head的值赋给p,使p指向头结点*/if(p==NULL) /*如果头指针为空,则链表为空*/{printf("\n 该学生信息系统为空!请先输入或添加学生信息!!!\n\n");return NULL; /*返回空指针*/}else{printf("\n请输入要查找的学生学号:");scanf("%s",num);printf("\n");while(p!=NULL) /*p非空*/{if(strcmp(p->num,num)==0) /*找到要查找的结点(姓名)*/{printf("\n ——————————您要查找的学生信息为————————\n\n"); /*输出要查找结点数据域信息*/printf("姓名学号高等数学大学英语读写大学英语听说计算机导论程序设计基础\n");printf("%s\t%s \t%d \t%d \t%3d \t%5d \t%7d \n",p->name,p->num,p->math,p->English_rw ,p->English_ls ,p->dl ,p->pdb );return head; /*返回头指针*/}elsep=p->next; /*p后移一个结点*/}if(p==NULL) /*p为空*/printf(" \n 对不起,查无此人! ! ! \n\n ");return head; /*返回头指针*/}}node * sort(node * head) /*定义排序函数*/{int score1,score2;char name1[20],num1[20];node * p,* q; /*定义三个指向链表结构的指针变量和一个结构体变量t*/ if(head==NULL) /*如果头指针为空,则链表为空*/{printf("\n 该学生信息系统为空!请先输入或添加学生信息!!!\n\n");return NULL; /*返回空指针*/}else{for(p=head;p;p=p->next) /*冒泡排序*/{score1=p->math+p->English_rw+p->English_ls+p->dl+p->pdb;for(q=p->next;q;q=q->next){score2=q->math+q->English_rw+q->English_ls+q->dl+q->pdb;if(score1<score2){strcpy(name1,p->name);strcpy(p->name,q->name);strcpy(q->name ,name1);strcpy(num1,p->num);strcpy(p->num,q->num);strcpy(q->num ,num1);sa(&(q->math) ,&(p->math));sa(&(q->English_rw) ,&(p->English_rw));sa(&(q->English_ls) ,&(p->English_ls));sa(&(q->dl),&(p->dl));sa(&(q->pdb),&(p->pdb));}}}printf("\n\n 已按学号排序 ! \n\n");printf(" 要查看按学号的顺序重新排序后学生管理系统的信息请按2! \n\n ");return head; /*返回头指针*/}}node * save(node * head) /*定义保存文件函数*/{node * p=head; /*定义一个指向SNODE结构体的指针p,并赋给头指针的值*/ FILE * fp; /*定义文件指针fp*/if((fp=fopen("成绩管理.txt","w"))==NULL) /*以写的方式打开record.txt文件且其为空*/{printf("Cannot open the file!");exit(0); /*退出*/}if(p==NULL)printf("\n 该学生管理系统为空!没有学生信息!!!\n\n");else{while(p) /*结点数据域信息顺序写入文件*/{fprintf(fp,"姓名:%s 学号:%s 高等数学:%d 大学英语读写:%d 大学英语听说:%d 计算机导论:%d 程序设计基础:%d\n\n",p->name,p->num,p->math,p->English_rw,p->English_ls,p->dl ,p->pdb);/ **/p=p->next; /*p后移一个结点*/}printf("\n 已将学生的信息保存到文件中 !!! \n\n");}fclose(fp); /*关闭文件*/return head; /*返回头指针*/}void main(){int key;struct student * head=NULL;while(key!=0){menuname();printf("请输入相应的功能键:");scanf("%d",&key);printf("\n");switch(key){case 1:head=input(head); /*调用输入函数返回值赋给head*/break;case 2:output(head); /*调用输入函数*/break;case 3:head=insert(head); /*调用插入函数返回值赋给head*/break;case 4:head=del(head); /*调用删除函数返回值赋给head*/break;case 5:head=search(head); /*调用查找函数返回值赋给head*/break;case 6:head=sort(head); /*调用排序函数返回值赋给head*/break;case 7:head=save(head); /*调用保存文件函数返回值赋给head*/break;case 0:printf("Thanks!"); /*退出*/return; /*返回*/} }}。
c语言课程设计学生成绩管理系统
C语言课程设计:学生成绩管理系统简介学生成绩是学校管理中至关重要的一项工作。
为了更好地管理学生成绩,提高教学质量,我们设计了一个基于C语言的学生成绩管理系统。
该系统可以帮助教师轻松地录入、查询和统计学生成绩,提供全面的学生成绩管理功能。
功能概述学生成绩管理系统主要包括以下功能:1.学生信息管理:可以添加、查询、修改、删除学生信息。
每个学生包括学号、姓名、性别、年龄等基本信息。
2.课程信息管理:可以添加、查询、修改、删除课程信息。
每门课程包括课程编号、课程名称、学分等基本信息。
3.成绩录入:可以根据学号和课程编号录入学生的课程成绩。
成绩包括平时成绩、期中成绩、期末成绩等。
4.成绩查询:可以根据学号或姓名查询学生的成绩,包括总成绩和各项成绩。
5.成绩统计:可以统计每门课程的平均成绩、最高成绩、最低成绩等统计数据。
6.成绩排序:可以按照总成绩对学生进行排序,以便了解学生的学习情况。
7.成绩报表:可以生成学生的成绩报表,以便于打印或导出。
系统设计学生成绩管理系统主要由以下几个模块组成:1.学生信息管理模块:通过该模块可以实现学生信息的添加、查询、修改和删除操作。
学生信息可以存储在文件中,使用文件读写函数实现对学生信息的操作。
2.课程信息管理模块:通过该模块可以实现课程信息的添加、查询、修改和删除操作。
课程信息可以存储在文件中,使用文件读写函数实现对课程信息的操作。
3.成绩录入模块:通过该模块可以根据学号和课程编号录入学生的课程成绩。
成绩信息可以存储在文件中,使用文件读写函数实现对成绩信息的操作。
4.成绩查询模块:通过该模块可以根据学号或姓名查询学生的成绩。
查询结果可以显示在屏幕上。
5.成绩统计模块:通过该模块可以统计每门课程的平均成绩、最高成绩、最低成绩等统计数据。
统计结果可以显示在屏幕上。
6.成绩排序模块:通过该模块可以按照总成绩对学生进行排序。
排序结果可以显示在屏幕上。
7.成绩报表模块:通过该模块可以生成学生的成绩报表,以便于打印或导出。
学生成绩管理组织实现功能1输入输出插入删除查找追加读
�1�输入、输出、插入、删除、查找、追加、读入、显示、保存�
�2�拷贝、排序、索引、分类合计、退出。
1、用 c 语言编写一个简单的学生信息管理程序�能实现对学生信息的简单管理。 2、具体要求� 建立一个 4 个学生的信息登记表�每个学生的信息包括�学号�姓名�和 3 门课程的成绩 �FOX,C,ENGLISH�。 程序运行时显示一个简单的菜单�例如� �1��信息输入�INPUT� �2��总分统计�COUNT� �3��总分排序�SORT� �4��查询(QUERY� 其中� �1��对 4 个学生的信息进行输入� �2��对每个学生的 3 门课程统计总分� (3)�对 4 个学生的总分按降序排序并显示出来� (4)�查询输入一个学号后�显示出该学生的有关信息� �i nclude<iostream.h> �i nclude<stdlib.h> struct student { int num; char name[20]; int foxscore; int cscore; int englishscore; struct student *next; };
struct student *creat(struct student *head) // 函数返回的是与节点相同类型的指针 { struct student *p1,*p2; p1=p2=(struct student*) malloc(sizeof(struct student)); // 申请新节点 cin>>p1->num>>p1->name>>p1->foxscore>>p1->cscore>>p1->englishscore; // 输入节点 的值
学生成绩管理系统C语言(附完整源代码)
学生成绩管理系统C语言(附完整源代码)学生成绩管理系统C语言(附完整源代码)课程设计报告学生成绩管理系统院系:专业:班级:完成日期: 2009年1月03日设计题目:学生成绩管理系统目录1、题目描述2、算法设计/设计思想3、结构框图、各模块的功能描述4、主体思想:5、程序的,,,流程图6、源代码1.题目描述设计一个简单的学生成绩管理系统,要求有简单的界面,程序段要分清模块,该程序应该:(1)输入学生成绩,求总分,平均分,以及排序。
(2)查询学生单科成绩,总分和平均成绩;(3)添加、修改学生成绩具有下列功能:(4)实现保存与查看功能2.算法设计/设计思想利用二维数组——定义stu[][]存储学生学号、各科成绩,总分,平均分,名次,利用文件来存储,读取数据。
详细合作是::负责inputx(),print1(),input();:卖力文件的储备和读取,main(),System(),Idea()和各挪用函数之间的连;:卖力find1(),find2(),find3(),find31(),Find();:负责del(),add(),change1(),Change();前期调试由小组配合卖力。
3.结构框图、各模块的功能描述3.1建立成就表3.1.1 input()功用是输退学生的信息,便于当前的查询、欣赏。
3.2增加3.2.1 add( )功用是向inputy()增加新的内容。
3.3.2 chance( )对单科成绩进行修改。
3.3查询3.3.1可根据学号,科目,名次,进行查询。
3.3.2查询内容包孕:该学生的各课成就、、均匀分。
3.4删除3.4.1能够输退学号删除一逻辑学生的一课成就。
3.5浏览成绩单3.5.1通过此print1()可以查看所有学生的各课成绩、总分、平均分和名次。
3.6文件()3.6.1保存以上所输入的信息以达到既是关闭窗口信息也不会丢失信息的目的。
3.6.2随时打开,修改文件。
3.7.退出功用是退出主菜单退出系意见评述功能菜单统输入增加及改查找功用退出功用菜单成就功用查输排查找学学添修某某生生加改XXX某成成就绩科绩绩绩成就按按按名学科次号目查查查找找找四、主体思想:1、斟酌到此步伐量大代码多,以是用函数挪用,分几小我去完成。
[C语言]学生成绩管理系统
一设计内容1.需求分析1.1项目需求概述通过此系统可以实现如下功能:1)数据信息的录入2)学生、课程及成绩全部显示3)查询功能4)成绩修改及删除5)成绩统计6)退出系统功能要求及说明1、数据信息的录入1)学生基本信息录入:学号不允许重复录入信息保存在student文件中2)课程信息的录入:录入信息保存在course文件中3)学生成绩录入:成绩信息保存在score文件中录入学生成绩信息时,综合成绩根据条件自动运算。
运算方法:如果录入课程为公共课,则综合成绩=平时成绩*30%+卷面成绩*70%如果录入课程为专业课,则综合成绩=平时成绩*40%+卷面成绩*70%。
说明:课号S开头表示专业课,P开头表示公共基础课。
2、学生、课程及成绩显示:输出所有的学生信息及成绩信息3、查询功能1)学生信息查询输入一个学号或姓名(可实现选择),查出此学生的基本信息并显示输出。
输入性别、所在系名,可查询所有男生(女生)、本系所有的学生的基本信息并显示输出。
2)成绩查询:输入一个学号时,查询出此学生的所有课程成绩信息并以列表显示,显示内容包括:学号、课程名、平时成绩、卷面成绩、综合成绩输入一个学生的姓名时,查询出此学生的所有课程成绩信息并以列表显示,显示内容包括:学号、姓名、性别、所在系、课程名、综合成绩输入一门课程名称,可查询出所有选修这门课程的学生成绩。
4、成绩修改(要求先输入密码)在修改成绩之前必须输入正确的用户密码才能进入成绩修改菜单进行操作。
5、删除功能当在student.txt中删除一个学生时,自动地在score.txt中删除此人所有信息.6、成绩统计显示每门课程成绩最高的学生的基本信息显示每门课程的平均成绩显示每门课程不及格(综合成绩小于60分)的学生信息,并统计出人数.7、退出系统2.概要设计功能模块图:3.详细设计2。
1 系统流程描述2。
2 主要数据变量结构定义本系统主要定义了三个结构体,分别用于存储学生基本信息(structstudent),课程信息(structcourse),学生成绩(struct score)其中,学生基本信息和学生成绩分别定义了两个结构体变量(struct studentinf,struct studentinf2[30]和structscoreinfs,struct score infs2[30]) 具体的结构体定义如下:structstudent{//定义结构体名为student的结构变量infchar num[10];//学生学号ﻩchar name[10];//学生姓名ﻩchar sex[10];//学生性别char age[10];//学生年龄ﻩchardep[10];//department,所在系};struct student inf;struct student inf2[30];struct course{//定义结构体名为course的结构变量infcchar snum[10];//课程编号char sname[10];//课程名称ﻩcharteacher[10];//教课教师};struct courseinfc;struct score{//定义结构体名为score的结构变量infschar num[10];//学生学号charsnum[10];//课程编号ﻩfloatpscore;//平时成绩ﻩfloatlscore;//卷面成绩ﻩfloat sscore;//综合成绩};struct score infs;struct scoreinfs2[30];2.3 系统所有主要功能的主要函数的设计流程图和代码1)主菜单inta;printf("^-—---——欢迎进入学生成绩管理系统—-——-————^\n");ﻩprintf("^ ^\n");ﻩprintf(”^ 1.教学信息登入(请输入1) ^\n”);printf(”^ 2。
c语言学生成绩管理系统使用说明书
c语言学生成绩管理系统使用说明书
学生成绩管理系统是一个常见的程序,它用于管理学生的成绩。
下面是一个简单的C语言学生成绩管理系统使用说明书:
1. 打开程序:打开学生成绩管理系统程序,您将看到一个主菜单,显示所有可用的选项。
2. 添加学生:使用“添加学生”选项,您可以输入学生的姓名、学号和成绩。
程序将把这些信息存储在一个结构体数组中。
3. 显示所有学生:使用“显示所有学生”选项,程序将打印出所有学生的姓名、学号和成绩。
4. 查找学生:使用“查找学生”选项,您可以输入学生的姓名或学号,程序将查找并打印出该学生的信息。
5. 修改学生成绩:使用“修改学生成绩”选项,您可以输入学生的姓名或学号,然后输入新的成绩。
程序将更新该学生的成绩。
6. 删除学生:使用“删除学生”选项,您可以输入学生的姓名或学号,程序将删除该学生的信息。
7. 保存数据:使用“保存数据”选项,程序将把结构体数组中的数据保存到一个文件中。
8. 退出程序:使用“退出程序”选项,您可以结束程序并退出。
注意事项:
1. 请确保在输入学生信息时输入正确的数据类型。
2. 在修改或删除学生信息之前,请确保您已经备份了原始数据。
3. 在使用“查找学生”选项时,请确保您输入的姓名或学号是正确的。
4. 在使用“保存数据”选项时,请确保您已经关闭了所有其他文件。
5. 如果您想再次使用程序,请确保您已经重新打开数据文件。
学生成绩管理系统(数据结构C语言版源代码)
学生成绩管理系统(数据结构C语言版源代码)-标准化文件发布号:(9556-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII#include<stdio.h>#include<string.h>#include<stdlib.h>struct students{char Num[10]; /*字符型学生学号*/char Name[20]; /*字符型学生姓名*/char Sex[3]; /*字符型学生性别*/double English; /*双精度实型英语成绩*/double Java; /*双精度实型Java成绩*/double Sjjg; /*双精度实数据结构*/double Szdl; /*双精度实型数字电路*/double Jsj; /*计算机组成原理*/struct students *next; /*用与构建连表指向下一结点*/};FILE *fp; /*定义全局变量fp*/void Revisemenu();/*修改菜单*/void Sortmenu();/*排序菜单*/void menu();/*主菜单*/void secret();/*安全验证*/struct students * Input();/*新建学生信息*/void fprint(struct students *head);/*将信息导入文件可追加*/void fprint_(struct students *head);/*将信息导入文件并覆盖*/void Browse(struct students *head);/*浏览全部学生信息*/struct students * create(struct students *head,int *n);/*从tushu_list中读取数据构建链表*/void FindofNum(struct students *head);/*按学号查询学生信息*/void FindofNname(struct students *head);/*按姓名查询学生信息*/void SortEnglish(struct students * head);/*按英语成绩排序*/void SortJava(struct students * head);/*按Java成绩排序*/void SortSjjg(struct students * head);/*按数据结构成绩排序*/void SortSzdl(struct students * head);/*按数字逻辑电路成绩排序*/void SortJsj(struct students * head);/*按计算机组成原理成绩排序*/struct students * Delete(struct students * head,char m[15]);/*按学号删除学生成绩信息*/struct students * Revise();/*修改学生信息(按编号修改)*//*主菜单*/void menu(){printf("\n\n");printf("***************************************************\n");printf(" 学生成绩管理系统 \n");printf("---------------------------------------------------\n");printf(" 1-添加新同学 2-浏览学生信息 \n");printf(" 3-按学号查询 4-按姓名查询 \n");printf(" 5-按成绩排序 6-修改学生信息 \n");printf(" 7-删除学生信息 0-退出系统 \n");printf("---------------------------------------------------\n");printf("___________________________________________________\n");}/*排序菜单*/void Sortmenu(){printf("\n\n");printf("***************************************************\n");printf(" 按成绩排序 \n");printf(" 1-大学英语 2-JAVA编程 \n");printf(" 3-数据结构 4-数字逻辑电路 \n");printf(" 5-计算机组成原理 0-返回上级菜单 \n");printf("***************************************************\n");}/*修改菜单*/void Revisemenu(){printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf(" 1--修改学生姓名 2--修改学生学号 \n");printf(" 3--修改学生性别 4--修改英语成绩 \n");printf(" 5--修改JAVA成绩 6--修改数据结构 \n");printf(" 7--修改数字电路 8--修改计算计 \n");printf(" 0--返回上级菜单 \n");printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");}/*安全验证*/void secret(){char a[20];printf("**欢迎来到学生信息管理系统,进入系统前请先进行密码验证---");printf(" ");do{gets(a); /*输入密码*/system("cls"); /*调用库函数清屏*/printf("对不起!您输入的密码有误,请重新输入---");}while(strcmp(a,"0605")!=0); /*单一密码"0605"*/system("cls");}/*新建学生信息*/struct students * Input(){struct students *p1,*p2,*head; /*建立辅助结点及头结点*/char Name;int n=0,x;printf("\n请按对应项输入学生信息以#结束:\n");printf("姓名学号性别英语 Java 数据结构数字电路计算机组成原理\n");p1=(struct students *)malloc(sizeof(struct students));head=p2=p1;do{ /*使用do while语句输入学生信息*/scanf("%s",&p1->Name);if(strcmp(p1->Name,"#")==0)break; /*判断结束符*/elsescanf("%s%s%lf%lf%lf%lf%lf",p1->Num,p1->Sex,&p1->English,&p1->Java,&p1->Sjjg,&p1->Szdl,&p1->Jsj);Name='#';p1=(struct students *)malloc(sizeof(struct students));p2->next=p1;p2=p1;n++;}while(1);p1->next=NULL;printf("学生信息输入结束!\n");getchar();printf("是否保存学生信息(1.是/2.否):");scanf("%d",&x);if(x==1)fprint(head); /*调用函数保存至文件*/elseprintf("\n文件没有被保存!\n");return head; /*返回头指针*/}/*将信息导入文件可追加*/void fprint(struct students *head){struct students *p1;if((fp=fopen("students_list.txt","a"))==NULL){printf("File open error!\n");exit(0);}for(p1=head;p1->next!=NULL;p1=p1->next) /*遍历*/fprintf(fp,"%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n", p1->Name,p1->Num,p1->Sex,p1->English,p1->Java,p1->Sjjg,p1->Szdl,p1->Jsj);/*将学生信息写入文件*/fclose(fp); /*关闭文件*/printf("\n学生信息已成功保存到文件 students_list.txt 中!\n");getchar();}/*将信息导入文件并覆盖*/void fprint_(struct students *head){struct students *p1;if((fp=fopen("students_list.txt","w"))==NULL){printf("File open error!\n");exit(0);}for(p1=head;p1!=NULL;p1=p1->next) /*遍历*/fprintf(fp,"%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n", p1->Name,p1->Num,p1->Sex,p1->English,p1->Java,p1->Sjjg,p1->Szdl,p1->Jsj);/*将学生信息写入文件*/fclose(fp); /*关闭文件*/;getchar();}/*浏览全部学生信息*/void Browse(struct students *head){char Num[10]; /*字符型学生学号*/char Name[20]; /*字符型学生姓名*/char Sex[3]; /*字符型学生性别*/double English; /*双精度实型英语成绩*/double Java; /*双精度实型Java成绩*/double Sjjg; /*双精度实数据结构*/double Szdl; /*双精度实型数字电路*/double Jsj; /*计算机组成原理*/if((fp=fopen("students_list.txt","a+"))==NULL){printf("File open error!\n");exit(0);}printf("-------------------------------------------------------------\n");printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(!feof(fp))/*读取并输出*/{fscanf(fp,"%s%s%s%lf%lf%lf%lf%lf",Name,Num,Sex,&English,&Java,&Sjjg,&Sz dl,&Jsj);printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",Name,Num,Sex,English,Java,Sjjg,Szdl,Jsj);};if(fclose(fp)){printf("Can not close the file!\n");exit(0);}}/*从tushu_list中读取数据构建链表*/struct students * create(struct students * head,int *n){FILE *fp;struct students*p,*p1,*p2;if((fp=fopen("students_list.txt","a+"))==NULL){printf("File open error!\n");exit(0);}while(!feof(fp)){(*n)++;p=(struct students *)malloc(sizeof(struct students));fscanf(fp,"%s%s%s%lf%lf%lf%lf%lf",p->Name,p->Num,p->Sex,&p->English,&p->Java,&p->Sjjg,&p->Szdl,&p->Jsj);if(head==NULL){head=p;p1=p;}else{p1->next=p;p2=p1;p1=p;}}p2->next=NULL;free(p);(*n)--;fclose(fp);return head;}/*按姓名查询学生信息*/void FindofName(struct students *head){int i=0,n=0;char b[20];struct students *p;head=create(head,&n);p=head;printf("\n请输入要查询的学生姓名:");scanf("%s",b);while(p!=NULL){if(strcmp(p->Name,b)==0){printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);i++;}p=p->next;}if(i==0)printf("\n对不起!没有找到名为“%s”的学生信息!\n",b);}/*按学号查询学生信息*/void FindofNum(struct students *head){int i=0,n;char b[20];struct students *p;head=create(head,&n);p=head;printf("\n请输入要查询的学生学号:");scanf("%s",b);while(p!=NULL){if(strcmp(p->Num,b)==0){printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);i++;}p=p->next;}if(i==0)printf("\n对不起!没有找到学号为“%s”学生信息!\n",b);}/*按英语成绩排序*/void SortEnglish(struct students * head){struct students *p,*tail; /*定义中间变量*/int n;double English;p=(struct students *)malloc(sizeof(struct students));head=create(head,&n);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(head->next!=NULL) /*利用选择法排序*/{tail=NULL;p=head;English=p->English; /*将链表中第一个成绩赋给English*/while(p!=NULL){if((p->English)>English)/*比较*/English=p->English;tail=p;p=p->next;}tail=NULL;p=head;while(p->next!=NULL){if(p->English==English){printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->English==English){ /*分数相同时无需比较*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);/*浏览排序后的信息*/printf("按英语成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/*按JAVA成绩排序*/void SortJava(struct students * head){struct students *p,*tail; /*定义中间变量*/int n;double Java;p=(struct students *)malloc(sizeof(struct students));head=create(head,&n);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(head->next!=NULL) /*利用选择法排序*/{tail=NULL;p=head;Java=p->Java; /*将链表中第一个成绩赋给Java*/while(p!=NULL){if((p->Java)>Java)/*比较*/Java=p->Java;tail=p;p=p->next;}tail=NULL;p=head;while(p->next!=NULL){if(p->Java==Java){printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->Java==Java){ /*成绩相同时无需比较*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);/*浏览排序后的信息*/printf("按Java成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/*按数据结构排序*/void SortSjjg(struct students * head){struct students *p,*tail; /*定义中间变量*/int n;double Sjjg;p=(struct students *)malloc(sizeof(struct students));head=create(head,&n);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(head->next!=NULL) /*利用选择法排序*/{tail=NULL;p=head;Sjjg=p->Sjjg; /*将链表中第一个成绩赋给Sjjg*/while(p!=NULL){if((p->Sjjg)>Sjjg)/*比较*/Sjjg=p->Sjjg;tail=p;p=p->next;}tail=NULL;p=head;while(p->next!=NULL){if(p->Sjjg==Sjjg){printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->Sjjg==Sjjg){ /*成绩相同时无需比较*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);/*浏览排序后的信息*/printf("按数据结构成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/*按数字电路排序*/void SortSzdl(struct students * head){struct students *p,*tail; /*定义中间变量*/int n;double Szdl;p=(struct students *)malloc(sizeof(struct students));head=create(head,&n);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(head->next!=NULL) /*利用选择法排序*/{tail=NULL;p=head;Szdl=p->Szdl; /*将链表中第一个成绩赋给Szdl*/while(p!=NULL){if((p->Szdl)>Szdl)/*比较*/Szdl=p->Szdl;tail=p;p=p->next;}tail=NULL;p=head;while(p->next!=NULL){if(p->Szdl==Szdl){printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->Szdl==Szdl){ /*成绩相同时无需比较*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);/*浏览排序后的信息*/printf("按数字电路成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/*按计算机组成原理排序*/void SortJsj(struct students * head){struct students *p,*tail; /*定义中间变量*/int n;double Jsj;p=(struct students *)malloc(sizeof(struct students));head=create(head,&n);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(head->next!=NULL) /*利用选择法排序*/{tail=NULL;p=head;Jsj=p->Jsj; /*将链表中第一个成绩赋给Jsj*/while(p!=NULL){if((p->Jsj)>Jsj)/*比较*/Jsj=p->Jsj;tail=p;p=p->next;}tail=NULL;p=head;while(p->next!=NULL){if(p->Jsj==Jsj){printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->Jsj==Jsj){ /*成绩相同时无需比较*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);/*浏览排序后的信息*/printf("按计算机组成原理成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/*按学号删除学生成绩信息*/struct students * Delete(struct students * head,char m[15]){struct students *ptr1,*ptr2;int n;printf("\n所有学生信息如下:\n");Browse(head);printf("\n请输入想要删除的学生学号:");scanf("%s",m);head=create(head,&n);if(head==NULL){printf("无学生信息!\n");return head;}if((strcmp(head->Num,m)==0)&&head!=NULL){ptr2=head;head=head->next;free(ptr2);}if(strcmp(head->Num,m)!=0){ptr1=head;ptr2=head->next;while(ptr2!=NULL){if(strcmp(ptr2->Num,m)==0){ptr1->next=ptr2->next;free(ptr2);}elseptr1=ptr2;ptr2=ptr1->next;}}fprint_(head);printf("\n学号为' %s '学生信息已被删除,并保存至文件!\n",m);return head;}/*修改学生信息(按编号修改)*/struct students * Revise(){int n=0,t;char num[10];char Num[10]; /*字符型学生学号*/char Name[20]; /*字符型学生姓名*/char Sex[3]; /*字符型学生性别*/double English; /*双精度实型英语成绩*/double Java; /*双精度实型Java成绩*/double Sjjg; /*双精度实数据结构*/double Szdl; /*双精度实型数字电路*/double Jsj; /*计算机组成原理*/struct students *head=NULL;struct students *p;printf("\n所有学生信息如下:\n");Browse(head);head=create(head,&n);printf("\n输入需要修改的学生的学号:");scanf("%s",num);p=head;while(head!=NULL){if(strcmp(p->Num,num)==0){system("cls");Revisemenu();printf("编号为%s的学生信息如下:\n",num);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->Java,p->Sjjg,p->Szdl,p->Jsj);while(1){printf("请选择需要修改的信息:");scanf("%d",&t);switch(t){case 1:printf("请输入新姓名:");scanf("%s",Name);strcpy(p->Name,Name);break;case 2:printf("请输入新学号:");scanf("%s",&Num);strcpy(p->Num,Num);break;case 3:printf("请输入新性别:");scanf("%s",Sex);strcpy(p->Sex,Sex);break;case 4:printf("请输入新英语成绩:");scanf("%lf",&English);p->English=English;break;case 5:printf("请输入新Java成绩:");scanf("%lf",&Java);p->Java=Java;break;case 6:printf("请输入新数据结构成绩:");scanf("%lf",&Sjjg);p->Sjjg=Sjjg;break;case 7:printf("请输入新数字电路成绩:");scanf("%lf",&Szdl);p->Szdl=Szdl;break;case 8:printf("请输入新计算机组成原理成绩:");scanf("%lf",&Jsj);p->Jsj=Jsj;break;case 0:system("cls");menu();goto lab;break;default:printf("对不起,输入有误!");break;}}}elsep=p->next;}lab:fprint_(head);printf("修改完成,并储存至文件!\n");return head;}/*主函数*/void main(){int choice,ch;char m[15];struct students *head=NULL;secret();menu();while(1){printf("请输入选项:");scanf("%d",&choice);switch(choice){case 1:Input();break;case 2:system("cls");menu();Browse(head);break;case 3:system("cls");menu();FindofNum(head);break;case 4:system("cls");menu();FindofName(head);break;case 5:system("cls");Sortmenu();do{printf("请输入您的选择:");scanf("%d",&ch);switch(ch){case 1:system("cls");Sortmenu();SortEnglish(head);break;case 2:system("cls");Sortmenu();SortJava(head);break;case 3:system("cls");Sortmenu();SortSjjg(head);break;case 4:system("cls");Sortmenu();SortSzdl(head);break;case 5:system("cls");Sortmenu();SortJsj(head);break;}}while(ch!=0);system("cls");menu();break;case 6:system("cls");menu();Revise();break;case 7:system("cls");menu();head=Delete(head,m);break;case 0:system("cls");printf("\t\t欢迎下次再来!");exit(0);default:printf("对不起,输入有误!");break;}}return ;}。
学生成绩管理系统c语言代码(供参考)
C程序学生管理系统以下是用c语言编写的学生成绩管理系统的简单代码,可以用vc运行(供参考)#include"stdio.h”#include”stdlib.h”#include”string.h”typedef struct student//定义学生{char name[10];int number;char sex[2];int math;int eglish;int clanguge;int average;}student;typedef struct unit//定义接点{student date;struct unit *next;}unit;unit* build()//建立链表并返回指针{unit *p;if((p=(unit*)malloc(sizeof(unit)))==NULL){ printf(”=〉初始化失败!”);return 0;}else{p->next=NULL;p-〉date.number=0;//头结点存放学生人数printf(”初始化成功!\n”);return p;}}void add(unit *head)//增加学生{unit *p,*q;int m,n=0;q=head-〉next;p=(unit*)malloc(sizeof(unit));printf(”=>请输入新生姓名!\n”);gets(p—〉);fflush(stdin);printf("=〉请输入学号!\n");while(n==0){scanf("%d”,&m);fflush(stdin);if(q==NULL) n=1;while(q){if(q—〉date。
number==m){printf("=>你输入的学号与已有同学的学号相同,请重新输入!\n”);q=head-〉next;break;}else{q=q->next;if(q==NULL) n=1;}}}p—〉date。
C语言学生成绩管理系统方案
学生成绩管理系统1 系统分析1.1 课程设计内容设计一学生成绩管理系统,功能包括:1.输入数据:可输入学生姓名、学号、及多门〔至少5门课程的成绩。
〔先将所有学生的姓名、学号输入完后,再逐科输入成绩2.编辑数据:可添加、删除、修改数据。
3.计算:计算出每个学生的总分及平均成绩;计算每门课程平均成绩。
4.查询:可按姓名、学号查询;可查询不及格的学生名单。
5.排序:可按姓名、学号、总分排序6.浏览:可浏览输入、查询或排序后的数据。
7.文件操作:可打开、保存、关闭数据文件。
1.2 系统功能需求分析本系统应具有以下功能:1、数据输入功能:可输入学生人数、姓名、学号、数学成绩、英语成绩,语文成绩、物理成绩、电脑成绩,输入后自动保存学生数据。
2、数据添加、修改、删除功能:可以添加多名学生信息,包括姓名、学号、各科成绩等待,可以修改某学生的全部信息,也可以删除某学生的全部信息。
3、计算功能:可以计算出每个学生的总分以及平均成绩,也可以计算出全部学生的各科的平均成绩。
4、查询功能:可按姓名、学号查询到某个学生的信息,可以输出不及格的学生名单。
5、排序功能:可以按学生姓名、学号、总分对全部学生排序。
6、浏览功能:可浏览输入、查询或排序后的数据。
7、文件功能:可以新建文件,打开文件。
8、关闭系统。
2 系统设计2.1总体设计按系统分析的功能要求将系统划分为以下几个主要功能模块:2.2详细设计1、主函数main<>利用While循环语句和switch<>实现各函数的调用,系统根据输入的数字选项来调用相应的函数。
2、菜单函数 menu<>通过菜单函数显示可选择的菜单,每次操作完后按任意键回到菜单函数。
3、新建文件函数 new_file<>通过该函数实现新建文件、输入学生数据功能。
4、编辑数据函数 edit_data<>该函数下还有3个函数,通过switch<>功能去选择其包含3个函数去实现不同的功能。
C语言--学生成绩管理系统
第一章设计内容、任务及具体要求1。
1内容和要求强化学习C语言中有关链表及外部文件的内容,独立设计学生成绩管理系统,并编程实现以下功能:1、整个系统均用C语言实现;2、利用指针、链表来实现学生成绩的数据结构设计;3、系统具有输入、显示、查询、删除、排序、插入,保存、读取基本功能;4、系统的各个功能模块都用函数的形式来实现;5、可以将学生成绩信息保存在文件中。
6、可以将学生信息从文件中读取出来。
1.2实现功能1、每一条记录包括一个学生的学号、姓名、3门成绩、平均成绩.2、输入功能:可以一次完成无数条记录的输入。
3、显示功能:完成全部学生记录的显示。
4、查找功能:完成按姓名查找学生记录,并显示。
5、排序功能:按学生平均成绩进行排序。
6、插入功能:按平均成绩高低插入一条学生记录。
7、保存功能:将学生记录保存在任何自定义的文件中,如保存在:c:\score.8、读取功能:将保存在文件中的学生记录读取出来。
9、有一个清晰美观界面来调用各个功能第二章设计的总体思路2。
1系统功能系统将可以实现以下功能:1、每一条记录包括一个学生的学号、姓名、3门成绩、平均成绩.2、输入功能:可以一次完成无数条记录的输入。
3、显示功能:完成全部学生记录的显示。
4、查找功能:完成按姓名查找学生记录,并显示。
5、排序功能:按学生平均成绩进行排序。
6、插入功能:按平均成绩高低插入一条学生记录。
7、保存功能:将学生记录保存在任何自定义的文件中,如保存在:c:\score。
8、读取功能:将保存在文件中的学生记录读取出来.9、有一个清晰美观界面来调用各个功能2.2系统的总体框架图2—2 系统总体框架图2。
3系统的总体流程图图2-3 系统总体流程图注:此图为概图、程序较多无法一一展示第三章功能模块的具体设计3.1 定义结构体本程序需要定义多个结构体,用于存放学生的相关信息。
struct student//定义结构体{int number;char name[10];float score;float yuwen;float yingyu;float shuxue;float sum;float ave;struct student *next;};typedef struct student score;int n,k;3。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
if (count==0 || count==1)
{
return;
}
list *p, *temp;
while(i > 0)
{p=head;
for(j=0; j<i-1; j++)
{
if(p->next->num > p->next->next->num)
/*
p=(list *)malloc(sizeof(list));
p->next=Null;
*/
r=head;
printf("请输入学生人数.\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
p=(list *)malloc(sizeof(list));
scanf("%d",&k);
while (p && p->num!=k)
p=p->next;
if(p)
{
printf("学号\t姓名\t性别\t语文成绩\t数学成绩\t英语成绩\t计算机成绩\t平均成绩\t总成绩\n");
printf("%d\t%s\t%s\t%d\t%d\t%d\t%d%5.1f\t%5.1f\n",p->num,p->name,p->sex,p->chinese,p->math,p->english,p->computer,p->ave,p->sum);
i--;
}
}
/*******************************************/
/*
int sortnum(node *list) ///学号排序
{
struct node temp;
const int n=20;
int i,j,k;
count --;
while(p!=Null)
{
r=p;
p=p->next;
} // 将新结点插入表尾
r->next=q;
r=r->next;
return (head);
}
void main() //主函数
{
list *p;
printf(" ---------------------------------------\n");
printf("请输入计算机成绩:\n");
scanf("%d",&p->computer);
(p->sum)=(p->chinese)+(p->computer)+(p->math)+(p->english);
(p->ave)=(p->sum)/4;
p->next=Null;
{
temp = p->next ;
p->next = p->next->next;
temp->next = p->next->next;
p->next->next = temp;
}
p = p->next;
}
scanf("%d",&k);
while (p && p->num!=k)
{
q=p;
p=p->next;
}
if(p)
{
q->next=p->next;
free(p);
count --;
}
else
printf("没有此学生的记录,无法删除!\n");
if (h == NULL)
printf("记录为空!");
/*************************/
list *p;
printf("学号\t姓名\t性别\t语文成绩\t数学成绩\t英语成绩\t计算机成绩\t平均分\t总成绩\t\n");
p=h->next;
printf("按照总成绩排序:\t");
for(i=0;i<n;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(list[j].num<list[k].num)
{
k=j;
temp=list[k];
list[k]=list[i];
r->next=p;
r=r->next;
/********************/
count ++;
/********************/
}
}
void output(list *h) //输出函数
{
/************************/
{
if(p->next->sum > p->next->next->sum)
{
temp = p->next ;
p->next = p->next->next;
temp->next = p->next->next;
p->next->next = temp;
while (p!=NULL)
{
printf("%d\n\t%s\t%s\t%d\t%d\t%d\t%d\t%5.1f\t%5.1f\n",
p->num,p->name,p->sex,p->chinese,p->math,p->english,p->computer,p->ave,p->sum);
list[i]=temp;
}
}
return 0;
}
*/
void find (list *h) ///查找函数
{
int k; // 要找的学生学号
list *p;
p=h->next;
printf("请输入要查找的学生学号:\n");
printf("请输入待插入学生的学号:\n");
scanf("%d",&q->num);
printf("请输入待插入学生性别:\n");
scanf("%s",&q->sex);
printf("请输入待插入学生的姓名:\n");
scanf("%s",&q->name);
}
p = p->next;
}
i--;
}
}
/*******************************************/
void sortnum(list *head)
{
int i=count, j, k;
struct node *next; // 指针域
}list;
/*************************/
void input(list *head) ///输入函数
/*************************/
{
list *p,*r;
int i,n; // n 为学生人数
printf("请输入语文成绩:\n");
scanf("%d",&p->chinese);
printf("请输入英语成绩:\n");
scanf("%d",&p->english);
printf("请输入数学成绩:\n");
scanf("%d",&p->math);
/*****************************/
p=(list *)malloc(sizeof(list));
p->next=Null;
/*****************************/
int k; // 控制循环的标志
while (1)
{
printf("请输入学生学号:\n");
scanf("%d",&p->num);
printf("请输入学生性别:\n");
scanf("%s",&p->sex);
printf("请输入学生姓名:\n");
scanf("%s",&p->name);
// {
// k=i;
// for(j=i+1;j<n;j++)
// if(list[j].sum<list[k].sum)
// k=j;
// temp=list[k];list[k]=list[i];list[i]=temp;