付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机科学与技术学院课程设计报告20152016 学年第二学期课程名称 C 语言程序设计题目学生成绩管理系统学生姓名 XXX学号 XXX专业班级 XXX指导教师 XXX合作者 XXX2016 年 6 月 30 日学生成绩管理系统本程序可实现对学生语数外三门课程成绩的录入与保存。1、设计目的本程序旨在训练读者的基本编程能力,了解管理信息系统开发流程,熟悉 的各种语法、编写流程、以及能够熟练运用各种算法、以及各种函数的使用。2、功能描述本程序可实现的功能:(1) 录入学生的成绩(2) 输出学生的成绩(3) 添加学生的成绩信息C 语言(4) 删除指定学生的成绩信息(5)按照要求对学生成绩信息进行排序
2、(6)根据学号查询指定学生的成绩(7)将学生的成绩信息以文件形式保存3、总体设计3.1 具体实现main ()函数:程序首先调用 menu ()函数,显示出系统主菜单,然后将 menu() 函数返回的从用户读取的选项 k 值赋予 k,接着进入 switch case 语句进入对应选项 函数,若输入错误没有该选项则给出提示( default )以上过程为一个死循环,直到用 户输入 0 为止。menu()函数:在屏幕上打印选项名称,然后用一个int 类型的变量接受从用户输入的选项,最后将其 return 至主函数。score*creatlink ()函数:创建链表主要实现流程如下:print()函
3、数:先令 P=head,使 p 指向第一个节点,当 head=! NULL 时说明没有到 链表尾端,那么就输出 p 所指向的结构数据,然后让 p 指向下一个节点,直到发现 p=NULL 为止。而当 head=NULl 说明链表中不存在数据,直接停止输出。score*add ()函数,添加新的学生信息,具体实现路程如流程图所示(图片制作 时没有加丫/N 判断,在判断图框中均为向左为真,向右为假):score*search ()函数:用来查询学生成绩,传递给函数指向链表的头指针,查 询时,如果找到与输入相匹配的学号则打印此学生, 反之则输出“没有任何学生资料! ”:score*sortdata()
4、 函数:该函数有学号、姓名、单科成绩排序(冒泡排序法), 实行过程如图:save ()函数:用来保存数据,首先从用户输入取得要保存的文件名,然后定义 一个指向文件的指针,以读写方式打开文件。将写生信息依次存入文件。score*load()函数:用于读取数据,通过“叶”方式打开文件并判断是否打开成 功。具体实现如下:score*statistics() 函数:它能实现程序的统计,通过 switch-case 语句选择统 计方式,通过循环计算总分或者平均分并打印出来,流程都是通过循环,让指针逐个 遍历整个链表,读取相应的数据并实现统计3.2 数据结构设计数据结构:定义了一个包含学生成绩信息的结构体
5、 (structscorenode ), 学生信息包括学号(number)、 姓名(name10)、 语文、 数学、 英语成绩(Chinese、mathmatic、english )、以及指向下一个结构体的链表指针 (structscorenode*next) 。3.3 函数功能描述main ()函数:主函数功能主要是让程序选择将要进行的操作,通过menu()函数返回的选项进入其他函数执行。intmenu ( intk )函数:此函数显示主菜单内容,需要一个 int 类型变量作为输入 要执行的选项并返回给 main ()函数。score*creatlink() 函数:此函数用于创建链表,为了节
6、省内存空间,我们采用 malloc ()函数为结构体分配动态内存空间。另外考虑到学号不可能是0,所以用输入0 的方式来判断是否结束输入,将最后的结构体中的指针指向NULL 并返回一个指向链表第一个结构的指针。voidprint (score*head )函数:此函数返回值为空,知识为了在 stdout 流(屏 幕)上打印出学生的成绩信息,需要一个指向链表头的指针来逐个向后打印。score*add(score*head,score*stu) 函数:为学生信息中添加新的学生资料,然后 重新排序(按学号),并返回头指针。传入函数的head 为链表头指针,stu 指针指的是要添加的位置。score*s
7、earch(score*head) 函数:按照学号查找学生信息,需要链表头指针并返 回指向被搜索学生的指针。搜索原理就是从头向后面依次检索。score*dele(score*head) 函数:删除指定学生的资料。传入头指针,在函数中创建变量储存要删除学生的学号,然后从头向尾检索,直至找到该学生并将其删除,返 回头指针score*sortdata(score*head) 函数:用于按要求(学号、姓名、单科成绩)排序, 最后返回头指针,排序运用老师上课时讲过的冒泡排序法。intsave(score*p1) 函数:将链表内的数据以文件的形式储存,传入的 p1 指针一 开始指向链表头,随着储存顺序一个
8、一个地向后面指,直到NULL 为止。函数内部定义一个指向文件的指针 *fp ,用于写入文件。score*load(score*head) 函数:读取文件数据, head 为一个新建的链表头指针, 读取文件数据之后令其保存至新建的链表之中,并返回头指针。score*statistics(score*head) 函数:统计成绩,可以统计总分、平均分、最高 低)分,返回操作后的链表首地址(头指针)。4、程序实现4.1 源代码#include #include #include#include #defineLENsizeof(structscorenode) #defineDEBUG/*=数据结构
9、=*/ structscorenodeintnumber;/ 学生学号charname10;/ 学生姓名floatchinese;/ 语文成绩floatmathmatic;/ 数学成绩floatenglish;/ 英语成绩structscorenode*next;typedefstructscorenodescore;/ 定义结构体变量typedefstructscorenode*scoreptr;/ 定义结构体变量指针intn,k;/*n,k 为全局变量, 本程序中的函数均可以使用它 , 分别用于记数和标记 */ /*=创建链表 =*/* 返回一个指向链表头的指针 */score*creat
10、link()score*head; score*p1,*p2,*p3,*max; inti,j; floatfen; chart10; n=0;p1=p2=p3=(score*)malloc(LEN);head=p3;元printf(请输入学生资料,输 0 退出!n);repeat1:printf( 请输入学生学号 (学号应大于 0): 应大于 0scanf(%d,&p1-number); while(p1-numbernumber);小于 0 时,程序报错,提示重新输入学号 if(p1-number=0)gotoend;时,转到末尾,结束创建链表elsep3=head; if(n0)
11、for(i=0;inumber!=p3-number) p3=p3-next;elseprintf(学号重复,请重输!n);gotorepeat1;学号已经存在,程序报错,返回前面重新输入 */ 开辟一个新单);/ 输入学号,学号/ 输入学号为字符或/ 当输入的学号为 0/* 当输入的printf( 请输入学生姓名:); scanf(%s,&p1-name);/* 输入学生姓名 */ printf( 请输入语文成绩 (0100) :);绩应在 0-100*/scanf(%f,&p1-chinese);while(p1-chinesechinese100)getchar();pr
12、intf( 输入错误,请重新输入语文成绩 ); 输入语文成绩直到正确为止 */scanf(%f,&p1-chinese);printf( 请输入数学成绩 (0100) :); 0-100*/scanf(%f,&p1-mathmatic);while(p1-mathmaticmathmatic100)getchar();printf( 输入错误,请重新输入数学成绩 ); 重新输入数学成绩直到正确为止 */scanf(%f,&p1-mathmatic);printf( 请输入英语成绩 (0100) :); /* 输入英语成绩,成绩应在 0-100*/ scanf(%f,&a
13、mp;p1-english);while(p1-englishenglish100)getchar();printf( 输入错误,请重新输入英语成绩 ); scanf(%f,&p1-english); /* 输入错误,重新输入英语成绩直到正确为止 */ head=NULL;while(p1-number!=0)n=n+1;if(n=1) head=p1; else p2-next=p1;p2=p1;p1=(score*)malloc(LEN);printf(请输入学生资料,输 0 退出!n);repeat2:printf( 请输入学生学号 (学号应大于 0):);scanf(%d,&a
14、mp;p1-number);/* 输入学号 */ while(p1-numbernumber); /* 输入学号为字符或小于 0 时,程序报错,提示重新输入学号 */if(p1-number=0)gotoend; /* 当输入的学号为 0 时,转到末尾, 结束创建链表 */elsep3=head;if(n0)for(i=0;inumber!=p3-number) p3=p3-next;elseprintf(学号重复,请重输!n);gotorepeat2;/* 当输入的学号已经存在, 程序报错,返回前面重新输入 */printf( 请输入学生姓名: ); scanf(%s,&p1-nam
15、e);/* 输入学生姓名 */ printf(请输入语文成绩 (0100):);scanf(%f,&p1-chinese);/* 输入语文成绩,成绩应在0-100*/while(p1-chinesechinese100)getchar();printf( 输入错误,请重新输入语文成绩 ); scanf(%f,&p1-chinese);/* 输入错误,重新输入语文成绩直到正确为止 */printf( 请输入数学成绩 (0100):);scanf(%f,&p1-mathmatic);/* 输入数学成绩,成绩应在0-100*/while(p1-mathmaticmathmat
16、ic100)getchar();printf( 输入错误,请重新输入数学成绩 );scanf(%f,&p1-mathmatic); /* 输入错误,重新输入数学成绩直到 正确为止 */printf( 请输入英语成绩 (0100) :);scanf(%f,&p1-english); /* 输入英语成绩,成绩应在 0-100*/while(p1-englishenglish100)getchar();printf( 输入错误,请重新输入英语成绩 );scanf(%f,&p1-english); /* 输入错误,重新输入英语成绩直到正确 为止*/end:p1=head;p3=
17、p1;for(i=1;in;i+)for(j=i+1;jnext;if(max-numberp1-number)k=max-number;max-number=p1-number;p1-number=k; /* 交换前后结点中的学号值,使得学号大者移到后面的结点中 */strcpy(t,max-name);strcpy(max-name,p1-name);strcpy(p1-name,t); /* 交换前后结点中的姓名, 使之与学号相匹配 */fen=max-chinese;max-chinese=p1-chinese;p1-chinese=fen; /* 交换前后结点中的语文成绩,使之与学号
18、相匹配 */fen=max-mathmatic;max-mathmatic=p1-mathmatic;p1-mathmatic=fen; /* 交换前后结点中的数学成绩,使之与学号相匹配 */fen=max-english;max-english=p1-english;chart10;号相匹配 */max=head;p1=head; /* 重新使 max,p 指向链表头 */p2-next=NULL; /* 链表结尾 */printf(输入的学生数为:d 个!n,n);return(head);/*=显示数据 =*/* 函数 print, 功能:显示学生成绩 */ voidprint(scor
19、e*head)score*p; if(head=NULL)printf(n 没有任何学生资料 !n);elseprintf(%dn,n);printf(-n);printf(|学号t|姓名t|语文t|数学t|英语t|n);printf(-n);/*域*/p=head;doprintf(|%dt|%st|%.1ft|%.1ft|%.1ft|n,p-number,p-name,p-chinese,p-mathmatic,p-english);printf(-n);印表格域 */p=p-next; while(p!=NULL);/*=添加学生数据 =*/* 函数 add, 功能:追加学生资料 , 并
20、且将所有学生资料按学号排序 */score*add(score*head,score*stu)score*p0,*p1,*p2,*p3,*max;inti,j;floatfen;p3=stu=(score*)malloc(LEN); /* 开辟一个新单元 */printf(n 输入要增加的学生的资料 !);repeat4:printf( 请输入学生学号 (学号应大于 0) :);scanf(%d,&stu-number); /* 输入学号,学号应大于 0*/ while(stu-numbernumber); /* 输入错误, 重新输入学号 */ if(stu-number=0)goto
21、end2; /* 当输入的学号为 0 时,转到末尾,结束追加 */p1-english=fen;/* 交换前后结点中的英语成绩,使之与学打印表格/* 打while(stu-mathmaticmathmatic100)elsep3=head;if(n0)for(i=0;inumber!=p3-number)p3=p3-next;elseprintf(学号重复,请重输!n);gotorepeat4;/* 当输入的学号已经存在,程序报错,返回前面重新输入 */printf( 输入学生姓名: );scanf(%s,stu-name);/* 输入学生姓名 */printf( 请输入语文成绩 (0100)
22、 :);scanf(%f,&stu-chinese);/* 输入语文成绩,成绩应在0-100*/while(stu-chinesechinese100)getchar();printf( 输入错误,请重新输入语文成绩 );scanf(%f,&stu-chinese);/* 输入错误,重新输入语文成绩直到正确为止 */printf( 请输入数学成绩 (0100) :);scanf(%f,&stu-mathmatic);/* 输入数学成绩,成绩应在0-100*/n=n+1;getchar();printf( 输入错误,请重新输入数学成绩 ); scanf(%f,&s
23、tu-mathmatic);学成绩直到正确为止 */printf( 请输入英语成绩 (0100) :);scanf(%f,&stu-english);在 0-100*/ while(stu-englishenglish100)getchar();printf( 输入错误,请重新输入英语成绩 );scanf(%f,&stu-english);*/p1=head;p0=stu;if(head=NULL)head=p0;p0-next=NULL; /* 当原来链表为空时,从首结点开始存放资料 */ else /* 链表不为空 */if(p1-next=NULL)p1-next=p0;
24、 p0-next=NULL;*/elsewhile(p1-next!=NULL)*/p2=p1;p1=p1-next;p1-next=p0; p0-next=NULL;p1=head;/* 输入错误,重新输入数/* 输入英语成绩,成绩应/* 输入错误, 重新输入英语成绩直到正确为止/* 找到原来链表的末尾 */* 将它与新开单元相连接/* 还没找到末尾,继续找scanf(%d,&number);p0=stu;for(i=1;in;i+)for(j=i+1;jnext;if(max-numberp1-number)k=max-number;max-number=p1-number;p1-
25、number=k;号大者移到后面的结点中 */strcpy(t,max-name);strcpy(max-name,p1-name);strcpy(p1-name,t);号相匹配 */fen=max-chinese;max-chinese=p1-chinese;p1-chinese=fen;与学号相匹配 */fen=max-mathmatic;max-mathmatic=p1-mathmatic;p1-mathmatic=fen;之与学号相匹配 */fen=max-english;max-english=p1-english;p1-english=fen;与学号相匹配 */max=head;p
26、1=head;end2:printf(现在的学生数为:d 个!n,n);return(head);/*=查询数据 =*/ /* 函数 search, 功能:查询学生成绩 */score*search(score*head)intnumber;score*p1,*p2;printf( 输入要查询的学生的学号: );/* 交换前后结点中的学号值,使得学/* 交换前后结点中的姓名,使之与学/* 交换前后结点中的语文成绩,使之/* 交换前后结点中的数学成绩, 使/* 交换前后结点中的英语成绩,使之/*重新使 max,p 指向链表头*/scanf(%d,&number);p2=p1;p1=p1-
27、next;while(number!=0)if(head=NULL)printf(n 没有任何学生资料 !n);return(head);printf(-n);printf(| 学号t|姓名t|语文t|数学t|英语t|n); printf(n);p1=head;while(number!=p1-number&p1-next!=NULL) p2=p1;p1=p1-next;if(number=p1-number)printf(|%dt|%st|%.1ft|%.1ft|%.1ft|n,p1-number,p1-name,p1-chinese,p1-mathmatic,p1-english)
28、;printf(-n);elseprintf(%d 不存在此学生 !n,number);printf( 输入要查询的学生的学号 ,);scanf(%d,&number);printf( 已经退出了 !n);return(head);/*=删除数据 =*/* 函数 dele ,功能:删除学生资料 */score*dele(score*head)score*p1,*p2;intnumber;printf( 输入要删除的学生的学号 (输入 0 时退出):);scanf(%d,&number);getchar();while(number!=0)/* 输入学号为 0 时退出 */if(
29、head=NULL)printf(n 没有任何学生资料 !n);return(head);p1=head;while(number!=p1-number&p1-next!=NULL) /*p1 指向的不是所要找的首 结点,并且后面还有结点 */ /*p1 后移一个结点 */ if(number=p1-number)/* 如果找到了 */if(p1=head)head=p1-next; /* 若 p1 指向的是首结点,把地二个结点地址赋予 elsep2-next=p1-next; /* 否则将下一个结点地址赋给前一结点地址 printf( 删除 :%dn,number);n=n-1;el
30、seprintf(%d 不存在此学生 !n,number); /* 找不到该结点 */ printf( 输入要删除的学生的学号 :);scanf(%d,&number); getchar();#ifdefDEBUG printf( 已经退出了 !n);#endifprintf(现在的学生数为:d 个!n,n);return(head);/*=排序=*/* 定义排序函数。此函数带回一个指向链表头的指针 */ score*sortdata(score*head)score*p,*max;inti,j,x; floatfen;chart10; if(head=NULL)printf(n 没有
31、任何学生资料,请先建立链表 !n); return(head);/* 链表为空 */ max=p=head;for(i=0;i80;i+) printf(*);printf(1按学生学号排序 t2 按学生姓名排序 t3 按语文成绩排序 nprintf(4按数学成绩排序 t5 按英语成绩排序 tn);for(i=0;i80;i+)printf(*);printf( 请选择操作:); scanf(%d,&x);/* 选择操作 */getchar();head*/*/for(j=i+1;j=n;j+)switch(x) /* 用 switch 语句实现功能选择 */case1:for(i=1
32、;in;i+)for(j=i+1;jnext;if(max-numberp-number)k=max-number;max-number=p-number;p-number=k; /* 交 换前后结点中的学号值,使得学号大者移到后面的结点中 */strcpy(t,max-name); strcpy(max-name,p-name);strcpy(p-name,t);/* 交换前后结点中的姓名,使之与学号相匹配 */fen=max-chinese; max-chinese=p-chinese; p-chinese=fen;/* 交换前后结点中的语文成绩,使之与学号相匹配 */ fen=max-m
33、athmatic;max-mathmatic=p-mathmatic; p-mathmatic=fen; /* 交 换前后结点中的数学成绩,使之与学号相匹配 */ fen=max-english; max-english=p-english;p-english=fen; /* 交 换前后结点中的英语成绩,使之与学号相匹配 */max=head;p=head;/* 重新使 max,p 指向链表头 */print(head);break;/* 打印值排序后的链表内容 */case2:for(i=1;inext;if(strcmp(max-name,p-name)0)/*strcmp :字符串比较函
34、数 */strcpy(t,max-name);/*strcpy: 字 符 串 复 制 函 数*/strcpy(max-name,p-name); strcpy(p-name,t);/* 交换前后结点中的姓名, 使得姓名字符串的值大者移到后面的结点中 k=max-number;max-number=p-number; p-number=k;换前后结点中的学号值,使之与姓名相匹配 */fen=max-chinese; max-chinese=p-chinese;p-chinese=fen;结点中的语文成绩,使之与姓名相匹配 */ fen=max-mathmatic;max-mathmatic=p-
35、mathmatic;p-mathmatic=fen;换前后结点中的数学成绩,使之与姓名相匹配 */fen=max-english; max-english=p-english;p-english=fen; 换前后结点中的英语成绩,使之与姓名相匹配 */p=head;max=head;print(head);break;case3:for(i=1;in;i+)for(j=i+1;jnext;if(max-chinesep-chinese)fen=max-chinese;*/* 交/* 交换前后/* 交/* 交max-chinese=p-chinese;p-chinese=fen;/* 交换前后结
36、点中的语文成绩,使得语文成绩高者移到后面的结点中k=max-number; max-number=p-number;p-number=k;换前后结点中的学号,使之与语文成绩相匹配 */ strcpy(t,max-name);strcpy(max-name,p-name); strcpy(p-name,t);/* 交换前后结点中的姓名,使之与语文成绩相匹配 */fen=max-mathmatic;max-mathmatic=p-mathmatic;p-mathmatic=fen;换前后结点中的数学成绩,使之与语文成绩相匹配 */ fen=max-english;max-english=p-eng
37、lish; p-english=fen;换前后结点中的英语成绩,使之与语文成绩相匹配 */p=head;max=head;print(head);break;case4:for(i=1;in;i+)for(j=i+1;jnext;if(max-mathmaticp-mathmatic)fen=max-mathmatic;max-mathmatic=p-mathmatic;p-mathmatic=fen;/* 交换前后结点中的数学成绩,使得数学成绩高者移到后面的结点中k=max-number; max-number=p-number; p-number=k; 后结点中的学号,使之与数学成绩相匹配
38、 */ strcpy(t,max-name);*/* 交/* 交/* 交*/* 交换前strcpy(max-name,p-name);strcpy(p-name,t);换前后结点中的姓名,使之与数学成绩相匹配 */ fen=max-chinese;max-chinese=p-chinese; p-chinese=fen;后结点中的语文成绩,使之与数学成绩相匹配 */ fen=max-english;max-english=p-english; p-english=fen;后结点中的英语成绩,使之与数学成绩相匹配 */p=head;max=head;print(head);break;case5
39、:for(i=1;in;i+)for(j=i+1;jnext;if(max-englishp-english)fen=max-english; max-english=p-english;p-english=fen;/* 交换前后结点中的英语成绩,使得英语成绩高者移到后面的结点中k=max-number; max-number=p-number;p-number=k;换前后结点中的学号,使之与英语成绩相匹配 */ strcpy(t,max-name);strcpy(max-name,p-name); strcpy(p-name,t);/* 交换前后结点中的姓名,使之与英语成绩相匹配 */ fe
40、n=max-chinese;max-chinese=p-chinese; p-chinese=fen;换前后结点中的语文成绩,使之与英语成绩相匹配 */ fen=max-mathmatic;/* 交/* 交换前/* 交换前*/* 交/* 交max-mathmatic=p-mathmatic;p-mathmatic=fen;换前后结点中的数学成绩,使之与英语成绩相匹配 */p=head;max=head;print(head);break;default:printf( 输入错误 , 请重试 !n);return(0);/*=保存数据 =*/* 函数 save, 功能:保存学生的资料 */voi
41、dsave(score*p1)FILE*fp;charfilepn20;/* 用来存放文件保存路径以及文件名 */ printf( 请输入文件路径及文件名 :); scanf(%s,filepn);if(fp=fopen(filepn,w+)=NULL)printf( 不能打开文件 !n);exit(1);fprintf(fp, 学生成绩管理系统 n);fprintf(fp,n);fprintf(fp,-n);fprintf(fp,|学号t| 姓名 t| 语文t| 数学t| 英语t|n);fprintf(fp,-n);/*/while(p1!=NULL)fprintf(fp,%dt%st%.1
42、ft%.1ft%.1ftn,p1-number,p1-name,p1-chin ese,p1-mathmatic,p1-english);p1=p1-next;/* 下移一个结点 */fclose(fp);printf( 文件已经保存 !n);return;/*=调入文件 =*/* 函数 loadfile ,功能: 从文件读入学生记录 */score*loadfile(score*head)score*p1,*p2;intm=0;charfilename10;FILE*fp;/* 交打印表格域printf( 请输入文件路径及文件名 :);scanf(%s,filename);/* 输入文件路径
43、及名称 */ if(fp=fopen(filename,r+)=NULL)printf( 不能打开文件 !n);return0;fscanf(fp, 学生成绩管理系统 n);fscanf(fp,n);fscanf(fp,- n);fscanf(fp,| 学号t| 姓名t| 语文t| 数学t| 英语t|n);fscanf(fp,- n);/*读入表格域*/printf( 学生成绩管理系统 n);printf(n);printf(-n);printf(| 学号t|姓名t|语文t|数学t|英语t|n);printf(-n);/*打印表格域 */m=m+1;if(m=1)p1=(score*)mall
44、oc(LEN);/* 开辟一个新单元 */fscanf(fp,%d%s%f%f%f,&p1-number,p1-name,&p1-chinese,&p1-mathmatic,&p1-english);printf(|%dt|%st|%.1ft|%.1ft|%.1ft|n,p1-number,p1-name,p1-chinese,p1-mathmatic,p1-english);/* 文件读入与显示 */head=NULL;don=n+1;if(n=1)head=p1;elsep2-next=p1;p2=p1;p1=(score*)malloc(LEN);/* 开
45、辟一个新单元 */fscanf(fp,%d%s%f%f%fn,&p1-number,p1-name,&p1-chinese,&p1-mathmatic,&p1-english);printf(|%dt|%st|%.1ft|%.1ft|%.1ft|n,p1-number,p1-name,p1-chinese,p1-mathmatic,p1-english);/* 文件读入与显示 */while(!feof(fp);p2-next=p1;p1-next=NULL;n=n+1;printf(- n);/* 表格下线 */fclose(fp);/* 结束读入,关闭文件
46、*/return(head);/*=统计=*/* 函数 statistics, 功能:统计学生成绩 */ score*statistics(score*head)floatsum1=0,sum2=0,sum3=0,ave1=0,ave2=0,ave3=0,max=0,min=0;charmaxname10,minname10;score*p;intx,y=0,i=0;p=head;printf(1 个人总分和平均分 t2 单科平均分 t3 总分最高分和最低分 n);scanf(%d,&x);getchar();switch(x)/* 用 switch 语句实现功能选择 */case1:
47、if(head=NULL)printf(n 没有任何学生资料 !n);return(head);elseprintf(- n);printf(|学号t|姓名t|语文t|数学t|英语t|总分t|平均分t|n);printf(- n);/* 打印表格域 */while(p!=NULL)sum1=p-chinese+p-mathmatic+p-english;/* 计算个人总分 */ave1=sum1/3;/* 计算个人平均分 */printf(|%dt|%st|%.1ft|%.1ft|%.1ft|%.1ft|%.1ft|n,p-number,p-name,p-chinese,p-mathmatic
48、,p-english,sum1,ave1);/* 打印结果 */printf(- n);p=p-next;return(head); break;case2:if(head=NULL)printf(n 没有任何学生资料 !n);return(head);while(p!=NULL)sum1=sum1+p-chinese;sum2=sum2+p-mathmatic;sum3=sum3+p-english;/* 计算总分 */y=y+1;ave1=sum1/y;ave2=sum2/y;ave3=sum3/y;/* 计算平均分 */ p=p-next;/* 使 p 指向下一个结点 */printf(语文平均分是 %.1fn,ave1); printf( 数学平均分是 %.1fn,ave2); printf( 英语平均分是 %.1fn,ave3);/* 打印结果 */ return(head); break; case3:if(head=NULL)printf(n 没有任何学生资料 !n);return(head);min=max=p-chinese+p-mathmatic+p-english; while(ichinese+p-mathmatic+p-english;/* 计算个人总分 */if(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026银行笔试题库及答案
- 2026年云南省临沧市高职单招职业适应性测试考试题库附答案解析
- 2026年天元锰业秋招笔试题目及答案试卷及答案
- 退耕还林还草项目水土保持方案报告
- 水质自动监测站点配套项目使用林地可行性报告
- 施工升降机预案
- 2026年办理交安b证考试试题及答案解析
- 气象观测站配套项目使用林地可行性报告
- 企业固定资产管理方案
- 2025年监理工程师试题及答案解析
- 2026年高考英语全国I卷考试真题及答案
- TSG 08-2026 特种设备使用管理规则
- 雨课堂学堂云在线《人工智能原理》单元测试考核答案
- 2025年中国科学技术大学强基计划试题及答案
- CJ/T 453-2014地铁隧道防淹门
- 韶音供应商QSA+QPA审核-checklist-V1
- JGT483-2015 岩棉薄抹灰外墙外保温系统材料
- 墩柱模板计算书1
- 控规项目投标技术标文件2019.1.18
- 初中英语语法中考复习词性转换精讲 课件 (共14张PPT)
- 湖南省长沙市直属教师公开招聘考试中学美术真题2023年
评论
0/150
提交评论