C语言课程设计报告34031157.docx
- 文档编号:10648863
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:27
- 大小:19.67KB
C语言课程设计报告34031157.docx
《C语言课程设计报告34031157.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告34031157.docx(27页珍藏版)》请在冰点文库上搜索。
C语言课程设计报告34031157
(此文档为word格式,下载后您可任意编辑修改!
)
华中科技大学计算机科学与技术学院
《C语言程序设计》课程设计
实验报告
题目:
C语言学生信息管理系统
专业:
计算机技术
班级:
11级
学号:
姓名:
指导教师:
甘早斌
说明
1、设计的目的
1)复习巩固C语言的基础知识,进一步加深对C语言编程的理解和掌握;
2)利用所学知识,理论和实际结合,利用资源,采用模块化的结构,使用模仿修改自主设计相结合的方法,锻炼学生综合分析解决实际问题的编程能力;
3)培养学生在项目开发中团队合作精神、创新意识及实战能力。
2、设计的任务
根据学生的实际情况,进行分组选题。
主要的课程设计题目如下(学生也可自主选题):
1.同学之间的通讯录
2、学生信息管理系统
3、设计要求与设计报告
设计要求:
1、任选上述题目之一,或自选题目。
2、模块化的程序设计
3、锯齿形的程序书写格式。
4、必须通过编译连接运行
设计报告:
1、设计目的和任务
2、总体设计:
包括程序设计组成框图、流程图。
3、详细设计:
包括模块功能说明:
函数功能、入口及出口参数说明,函数调用关系描述等。
4、调试与测试:
包括调试方法,测试结果分析与讨论,测试过程中遇到的主要问题及采取的解决措施。
5、源程序清单和执行结果:
清单中应有足够的注释。
设计目的和任务
设计目的:
(1)基本掌握面向过程程序设计的基本思路和方法;
(2)达到熟练掌握C语言的基本知识和技能;
(3)能够利用所学的基本知识和技能,解决简单的程序设计问题
程序功能:
(1).学生基本信息及成绩所选科目成绩的录入。
(2).基本信息的查询与修改。
(3).对学生成绩进行排序
(4)对所开课程的成绩分析(求其平均成绩,最高分和最低分);
(5).对学生考试成绩进行排名;
(6).保存于读取文件
(7).对学生成绩的追加与删除
对应子函数与流程图
voidcreatlist();*调用创建链表函数*
voidloadlist();*从文件调入记录函数*
voidsearchlist()*调用成绩查询函数*
voiddellist()*调用删除学生资料函数*
voidaddlist();break*调用追加学生资料函数*
voidprintlist(,k;
*==============================================================================================*
score*creatlist(void)
*函数creatlist,功能:
创建链表,此函数带回一个指向链表头的指针*
{
score*;
chart[10];
n=0;
p1=p2=p3=(score*)malloc(LEN);");
repeat1:
printf("请输入学生学号(学号应大于0):
");*输入学号,学号应大于0*
scanf("%d",&p1->number);
while(p1->number<0)
{
getchar();
printf("输入错误,请重新输入学生学号:
");
scanf("%d",&p1->number);}
if(p1->number==0)
gotoend;*当输入的学号为0时,转到末尾,结束创建链表*
else
{
p3=>0)
{
for(i=0;i { if(p1->number! =p3->number) p3=p3->next; else { printf("学号重复,请重输! \n"); gotorepeat1;*当输入的学号已经存在,程序报错,返回前面重新输入* } } } } printf("请输入学生姓名: "); scanf("%s",&p1->name); printf("请输入c成绩(0~100): ");*0-100* scanf("%f",&p1->C); while(p1->C<0||p1->C>100) { getchar(); printf("输入错误,请重新输入c成绩"); scanf("%f",&p1->C);} printf("请输入高数成绩(0~100): "); scanf("%f",&p1->Math); while(p1->Math<0||p1->Math>100) { getchar(); printf("输入错误,请重新输入高数成绩"); scanf("%f",&p1->Math);} printf("请输入英语成绩(0~100): "); scanf("%f",&p1->English); while(p1->English<0||p1->English>100) { getchar(); printf("输入错误,请重新输入英语成绩"); scanf("%f",&p1->English);} =n+1; if(n==1) "); repeat2: printf("请输入学生学号(学号应大于0): "); scanf("%d",&p1->number);*输入学号,学号应大于0* while(p1->number<0) { getchar(); printf("输入错误,请重新输入学生学号: "); scanf("%d",&p1->number); } if(p1->number==0) gotoend;*当输入的学号为0时,转到末尾,结束创建链表* else { p3=>0) { for(i=0;i { if(p1->number! =p3->number) p3=p3->next; else { printf("学号重复,请重输! \n"); gotorepeat2; *当输入的学号已经存在,程序报错,返回前面重新输入* } } } } printf("请输入学生姓名: "); scanf("%s",&p1->name);*输入学生姓名* printf("请输入c成绩(0~100): "); scanf("%f",&p1->C);*输入各科成绩,成绩应在0-100,并直到输入正确为止* while(p1->C<0||p1->C>100) { getchar(); printf("输入错误,请重新输入c成绩"); scanf("%f",&p1->C); } printf("请输入高数成绩(0~100): "); scanf("%f",&p1->Math); while(p1->Math<0||p1->Math>100) { getchar(); printf("输入错误,请重新输入高数成绩"); scanf("%f",&p1->Math); } printf("请输入英语成绩(0~100): "); scanf("%f",&p1->English); while(p1->English<0||p1->English>100) { getchar(); printf("输入错误,请重新输入英语成绩"); scanf("%f",&p1->English); } } end: p1=;i++) { for(j=i+1;j<=n;j++) { max=p1; p1=p1->next; if(max->number>p1->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->C; max->C=p1->C; *交换前后结点中的c成绩,使之与学号相匹配* fen=max->Math; max->Math=p1->Math; p1->Math=fen; *交换前后结点中的高数成绩,使之与学号相匹配* fen=max->English; max->English=p1->English; p1->English=fen; *交换前后结点中的英语成绩,使之与学号相匹配* } } max=",n); return([10]; FILE*fp; printf("请输入文件路径及文件名: "); scanf("%s",filepn); if((fp=fopen(filepn,"r+"))==NULL) { printf("不能打开文件! \n"); return0; } fscanf(fp,"学习成绩管理系统\n"); fscanf(fp,"作者: 班级: 11级计算机学号: \n"); fscanf(fp,"-----\n"); fscanf(fp,"|学号\t|姓名\t|C\t|高数\t|英语\t|\n"); fscanf(fp,"-----\n");*读入表格域* printf("学生成绩管理系统\n"); printf("作者: 班级: 11级计算机学号: \n"); printf("-----\n"); printf("|学号\t|姓名\t|C\t|高数\t|英语\t|\n"); printf("-----\n");*打印表格域* m=m+1; if(m==1) { p1=(score*)malloc(LEN);*开辟一个新单元* fscanf(fp,"%d%s%f%f%f",&p1->number,p1->name,&p1->C,&p1->Math,&p1->English); printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n",p1->number,p1->name,p1->C,p1->Math,p1->English); *文件读入与显示* =n+1; if(n==1)",&p1->number,p1->name,&p1->C,&p1->Math,&p1->English); printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n",p1->number,p1->name,p1->C,p1->Math,p1->English); }while(! feof(fp)); p2->next=p1; p1->next=NULL; n=n+1; }printf("-----\n");*表格下线* fclose(fp);*结束读入,关闭文件* return(; chart[10]; p3=stu=(score*)malloc(LEN);*开辟一个新单元* printf("\n输入要增加的学生的资料! "); repeat4: printf("请输入学生学号(学号应大于0): "); scanf("%d",&stu->number); while(stu->number<0)*输入学号,学号应大于0* { getchar(); printf("输入错误,请重新输入学生学号: "); scanf("%d",&stu->number); }*输入错误,重新输入学号* if(stu->number==0) gotoend2;*当输入的学号为0时,转到末尾,结束追加* else { p3=>0) { for(i=0;i { if(stu->number! =p3->number) p3=p3->next; else { printf("学号重复,请重输! \n"); gotorepeat4; *当输入的学号已经存在,程序报错,返回前面重新输入* } } } } ****************************************************** printf("输入学生姓名: "); scanf("%s",stu->name);*输入学生姓名* printf("请输入c成绩(0~100): "); scanf("%f",&stu->C);*输入各科成绩,成绩应在0-100,直到输入正确* while(stu->C<0||stu->C>100) { getchar(); printf("输入错误,请重新输入c成绩"); scanf("%f",&stu->C);} printf("请输入高数成绩(0~100): "); scanf("%f",&stu->Math); while(stu->Math<0||stu->Math>100) { getchar(); printf("输入错误,请重新输入高数成绩"); scanf("%f",&stu->Math); } printf("请输入英语成绩(0~100): "); scanf("%f",&stu->English); while(stu->English<0||stu->English>100) { getchar(); printf("输入错误,请重新输入英语成绩"); scanf("%f",&stu->English);}*输入错误,重新输入sql成绩直到正确为止* p1==n+1; p1=;i++) { for(j=i+1;j<=n;j++) { max=p1; p1=p1->next; if(max->number>p1->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->C; max->C=p1->C; p1->C=fen; *交换前后结点中的各科成绩,使之与学号相匹配* fen=max->Math; max->Math=p1->Math; p1->Math=fen; fen=max->English; max->English=p1->English; p1->English=fen; } } max=",n); return(");return("); printf("|学号\t|姓名\t|C\t|高数\t|英语\t|\n"); printf("-----\n");*打印表格域* p1=",p1->number,p1->name,p1->C,p1->Math,p1->English); printf("-----\n"); }*打印表格域* else printf("%d不存在此学生! \n",number); printf("输入要查询的学生的学号,"); scanf("%d",&number); } printf("已经退出了! \n"); return("); return(",number);n=n-1; } else printf("%d不存在此学生! \n",number); *找不到该结点* printf("输入要删除的学生的学号: "); scanf("%d",&number); getchar(); } #ifdefDEBUG printf("已经退出了! \n"); #endif printf("现在的学生数为: %d个! \n",n); return(");} else { printf("%d\n",n); printf("----\n"); printf("|学号\t|姓名\t|C\t|高数\t|英语\t|\n"); printf("-----\n");*打印表格域* p=",p->number,p->name,p->C,p->Math,p->English); printf("---\n");*打印表格域* p=p->next; }while(p! =NULL);*打印完成了* } } *==============================================================================================* *==============================================================================================* score*statisticslist(score*; score*p; intx,y=0,i=0; p="); scanf("%d",&x); getchar(); switch(x) *用switch语句实现功能选择* { case1: if(");return("); printf("|学号\t|姓名\t|C\t|高数\t|英语\t|总分\t|平均分\t|\n"); printf("\n");*打印表格域* while(p! =NULL) { sum1=p->C+p->Math+p->English;*计算个人总分* ave1=sum13;*计算个人平均分* printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|%.1f\t|%.1f\t|\n",p->number,p->name,p->C,p->Math,p->English,sum1,ave1); *打印结果* printf("\n");*打印表格域* p=p->next; } } return(");return(",ave1); printf("高数平均分是%.1f\n",ave2); printf("英语平均分是%.1f\n",ave3);*打印结果* return(");return() { i=i+1; sum1=p->C+p->Math+p->English;*计算个人总分* if(max max=sum1; p=p->next; } printf("总分最高分: %.1f",max); printf("\n"); return("); return(=p->C+p->Math+p->English; while(p! =NULL) { sum2=p->C+p->Math+p->English; if(min>sum2) min=sum2; p=p->next; } } printf("总分最低分: %.1f",min); printf("\n"); return("); } return([20];*用来存放文件保存路径以及文件名* printf("请输入文件路径及文件名: "); scanf("%s",filepn); if((fp=fopen(filepn,"w+"))==NULL) { printf("不能打开文件! \n"); return0; } fprintf(fp,"学生成绩管理系统\n"); fprintf(fp,"作者: 班级: 11级计算机学号: V\n"); fprintf(fp,"-----\n"); fprintf(fp,"|学号\t|姓名\t|C\t|高数\t|英语\t|\n"); fprintf(fp,"-----\n"); *打印表格域* while(p1! =NULL) { fprintf(fp,"%d\t%s\t%.1f\t%.1f\t%.1f\t\n",p1->number,p1->name,p1->C,p1->Math,p1->English); p1=p1->next;*下移一个结点* } fclose(fp); printf("文件已经保存! \n"); return0; } *==============================================================================================* *==============================================================================================* score*taxislist(score*; chart[10]; if(");return("); printf("4按高数成绩排序\t5按英语成绩排序\t\n"); for(i=0;i<80;i++) printf("\3"); printf("请选择操作: "); scanf("%d",&x);*选择操作* getchar(); switch(x)*用switch语句实现功能选择* { case1: for(i=1;i { for(j=i+1;j<=n;j++) { max=p; p=p->next; if(max->number>p->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->C; max->C=p->C; p->C=fen;*交换前后结点中的各科成绩,使之与学号相匹配* fen=max->Math; max->Math=p->Math; p->Math=fen; fen=max->English; max->English=p->Engl
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 报告 34031157
![提示](https://static.bingdoc.com/images/bang_tan.gif)