C程序设计作业课程设计报告成绩管理.docx
- 文档编号:11333723
- 上传时间:2023-05-31
- 格式:DOCX
- 页数:19
- 大小:19.95KB
C程序设计作业课程设计报告成绩管理.docx
《C程序设计作业课程设计报告成绩管理.docx》由会员分享,可在线阅读,更多相关《C程序设计作业课程设计报告成绩管理.docx(19页珍藏版)》请在冰点文库上搜索。
C程序设计作业课程设计报告成绩管理
C程序设计作业课程设计报告
单科课程成绩管理
一:
需求分析:
1、当前学生信息:
通过结构体structstudent来保存学生的姓名,学号,平时成绩、期中成绩和期末成绩等等相关信息,并且通过cin函数来进行给当前学生输入初始信息.
2、学生成绩查询:
输入一个学号,在文件中查找此学生,若找到则输出此学生的全部信息和成绩;若找不到则输出查找失败的信息.同时也可以全部把各科的平均成绩,最高和最低分输出。
3、新生插入:
通过给该生的学号来和原班上的学生的学号比较大小,若大就在后,若小则靠前排,将此生的信息保存下来。
4、输出全部学生信息和全部学生成绩。
5、退出系统.
6、附加说明:
系统将来完善的功能有:
可以通过性别来模糊查询,也可以通过姓名的姓来先进行模糊查询,以便后面精确查找。
二:
概要设计:
(一)、仔细阅读系统要求,首先将此系统化分为如下模块(即如下函数)
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)将所有数据写入文件中
(0)退出程序
(二)、数据结构设计:
程序设计中用到的结构体类型:
学生信息结构体类型:
typedefstruct/*定义结构体数组*/
{
charnum[10];/*学号*/
charname[20];/*姓名*/
intscore[3];/*成绩*/
intadd;/*总分*/
}Student;
(三).程序设计中用到的函数:
intmenu_select()/*菜单函数*/
intInput(Studentstud[],intn)/*输入若干条记录*/
voidDisplay(Studentstud[],intn)/*显示所有记录*/
voidSort1_by_num(Studentstud[],intn)/*按学号排序*/
intInsert_a_record(Studentstud[],intn)/*插入一条记录*/
intDelete_a_record(Studentstud[],intn)/*按姓名查找,删除一条记录*/
voidQuery_a_record(Studentstud[],intn)/*查找并显示一个记录*/
voidSort2_by_add(Studentstud[],intn)/*按总分排序*/
voidStatistic(Studentstu[],intn)/*输出各分数段人数*/
voidWritetoText(Studentstud[],intn)/*将所有记录写入文件*/
四:
主要源程序代码:
#include
#include
#include
#include
typedefstruct/*定义结构体数组*/
{
charnum[10];/*学号*/
charname[20];/*姓名*/
intscore[3];/*成绩*/
intadd;/*总分*/
}Student;
Studentstu[80];/*结构体数组变量*/
intmenu_select()/*菜单函数*/
{
charc;
do{
system("cls");/*运行前清屏*/
printf("\t\t****Students'GradeManagementSystem****\n");/*菜单选择*/
printf("\t\t|1.InputRecords|\n");
printf("\t\t|2.DisplayAllRecords|\n");
printf("\t\t|3.Sort1|\n");
printf("\t\t|4.InsertaRecord|\n");
printf("\t\t|5.DeleteaRecord|\n");
printf("\t\t|6.Query|\n");
printf("\t\t|7.Sort2|\n");
printf("\t\t|8.Statistic|\n");
printf("\t\t|9.WritetoaTextfile|\n");
printf("\t\t|0.Quit|\n");
printf("\t\t*****************************************\n");
printf("\t\t\tGiveyourChoice(0-9):
");
c=getchar();/*读入选择*/
}while(c<'0'||c>'9');
return(c-'0');/*返回选择*/
}
intInput(Studentstud[],intn)/*输入若干条记录*/
{inti=0,j=0;
charsign,x[10];/*x[10]为清除多余的数据所用*/
while(sign!
='n'&&sign!
='N')/*判断*/
{
printf("\t\t\tstudent'snum:
");/*交互输入*/
scanf("\t\t\t%s",stud[n+i].num);
printf("\t\t\tstudent'sname:
");
scanf("\t\t\t%s",stud[n+i].name);
printf("\t\t\tstudent'sscores(平时成绩、期中成绩和期末成绩):
");
scanf("\t\t\t%d,%d,%d",&stud[n+i].score[j],&stud[n+i].score[++j],&stud[n+i].score[++j]);
stud[n+i].add=stud[n+i].score[j]*20/100+stud[n+i].score[++j]*20/100+stud[n+i].score[++j]*60/100;
gets(x);/*清除多余的输入*/
printf("\t\t\tanymorerecords?
(Y/N)");
scanf("\t\t\t%c",&sign);/*输入判断*/
i++;
}
return(n+i);
}
voidDisplay(Studentstud[],intn)/*显示所有记录*/
{
inti;
printf("\t\t\t-----------------------------------------------\n");/*格式头*/
printf("\t\t\tnumbernamescoresadd\n");
printf("\t\t\t-----------------------------------------------\n");
for(i=1;i { printf("\t\t\t%-16s%-15s%d\n",stud[i-1].num,stud[i-1].name,stud[i-1].scores,stud[i-1].add); if(i>1&&i%10==0)/*每十个暂停*/ {printf("\t\t\t-----------------------------------\n");/*格式*/ printf("\t\t\t"); system("pause"); printf("\t\t\t-----------------------------------\n"); } } printf("\t\t\t"); system("pause"); } voidSort1_by_num(Studentstud[],intn)/*按学号排序*/ { inti,j,*p,*q,s; chart[10]; for(i=0;i for(j=0;j if(strcmp(stud[j].num,stud[j+1].num)>0) {strcpy(t,stud[j+1].num); strcpy(stud[j+1].num,stud[j].num); strcpy(stud[j].num,t); strcpy(t,stud[j+1].name); strcpy(stud[j+1].name,stud[j].name); strcpy(stud[j].name,t); p=stud[j+1].score; q=stud[j].score; s=*p;*p=*q;*q=s; s=*(p+1);*(p+1)=*(q+1);*(q+1)=s; s=*(p+2);*(p+2)=*(q+2);*(q+2)=s; p=&stud[j+1].add; q=&stud[j].add; s=*p;*p=*q;*q=s; } } intInsert_a_record(Studentstud[],intn)/*插入一条记录*/ {charx[10],i=0;/*清除多余输入所用*/ printf("\t\t\tstudent'snum: ");/*交互式输入*/ scanf("\t\t\t%s",stud[n].num); printf("\t\t\tstudent'sname: "); scanf("\t\t\t%s",stud[n].name); printf("\t\t\tstudent'sscores: "); scanf("\t\t\t%d,%d,%d",&stud[n].score[i],&stud[n].score[++i],&stud[n].score[++i]); stu[n].add=stud[n].score[i]*20/100+stud[n].score[++i]*20/100+stud[n].score[++i]*60/100; gets(x); n++; Sort_by_num(stud,n);/*调用排序函数*/ printf("\t\t\tInsertSuccessed! \n");/*返回成功信息*/ return(n); } intDelete_a_record(Studentstud[],intn)/*按姓名查找,删除一条记录*/ { chars[20]; inti=0,j; printf("\t\t\ttellmehis(her)name: ");/*交互式问寻*/ scanf("%s",s); while(strcmp(stud[i].name,s)! =0&&i if(i==n) { printf("\t\t\tnotfind! \n");/*返回失败信息*/ return(n); } for(j=i;j { strcpy(stud[j].num,stud[j+1].num); strcpy(stud[j].name,stud[j+1].name); for(n=0;n<3;n++) stud[j].score[n]=stud[j+1].score[n]; stu[j].add=stu[j+1].add; } printf("\t\t\tDeleteSuccessed! \n");/*返回成功信息*/ return(n-1); } voidQuery_a_record(Studentstud[],intn)/*查找并显示一个记录*/ { chars[20],j=0; inti=0; printf("\t\t\tinputhis(her)name: ");/*交互式输入*/ scanf("\t\t\t%s",s); while(strcmp(stud[i].name,s)! =0&&i if(i==n) { printf("\t\t\tnotfind! \n");/*输入失败信息*/ return; } printf("\t\t\this(her)number: %s\n",stud[i].num);/*输出该学生信息*/ printf("\t\t\this(her)scores: %d,%d,%d\n",stud[i].score[j],stud[i].score[++j],stud[i].score[++j]); printf("\t\t\this(her)add: %d",stu[i].add); } voidSort2_by_add(Studentstud[],intn)/*按总分排序*/ { inti,j,*p,*q,s; chart[10]; for(i=0;i for(j=0;j if(strcmp(stud[j].add,stud[j+1].add)>0) {strcpy(t,stud[j+1].add); strcpy(stud[j+1].add,stud[j].add); strcpy(stud[j].add,t); strcpy(t,stud[j+1].num); strcpy(stud[j+1].num,stud[j].num); strcpy(stud[j].num,t); strcpy(t,stud[j+1].name); strcpy(stud[j+1].name,stud[j].name); strcpy(stud[j].name,t); p=stud[j+1].score; q=stud[j].score; s=*p;*p=*q;*q=s; s=*(p+1);*(p+1)=*(q+1);*(q+1)=s; s=*(p+2);*(p+2)=*(q+2);*(q+1)=s; } } voidStatistic(Studentstu[],intn)/*输出各分数段人数*/ { inta=0,b=0,c=0,d=0,e=0; for(i=0;i if(stu[i].add<60)a++; if(stu[i].add>=60&&stu[i].add<70)b++; if(stu[i].add>=70&&stu[i].add<80)c++; if(stu[i].add>=80&&stu[i].add<90)d++; if(stu[i].add>=90&&stu[i].add<=100)e++; printf("addscores<60%d\n60<=addscores<70%d\n70<=addscores<80%d\n80<=addscores<90%d\n90<=addscores<100%d\n",a,b,c,d,e); voidWritetoText(Studentstud[],intn)/*将所有记录写入文件*/ { inti=0; FILE*fp;/*定义文件指针*/ charfilename[20];/*定义文件名*/ printf("\t\t\tWriteRecordstoaTextFile\n");/*输入文件名*/ printf("\t\t\tInputthefilename: "); scanf("\t\t\t%s",filename); if((fp=fopen(filename,"w"))==NULL)/*打开文件*/ { printf("\t\t\tcann'topenthefile\n"); system("pause"); return; } fprintf(fp,"%d\n",n);/*循环写入数据*/ while(i { fprintf(fp,"%-16s%-15s%d\n",stud[i].num,stud[i].name,stud[i].score[0],stud[i].score[1],stud[i].score[2],stu[i].add); i++; } fclose(fp);/*关闭文件*/ printf("Successed! \n");/*返回成功信息*/ } voidmain()/*主函数*/ { intn=0; for(;;) { switch(menu_select())/*选择判断*/ { case1: printf("\t\t\tInputRecords\n");/*输入若干条记录*/ n=Input(stu,n); break; case2: printf("\t\t\tDisplayAllRecords\n");/*显示所有记录*/ Display(stu,n); break; case3: printf("\t\t\tSort1\n"); Sort1_by_num(stu,n);/*按学号排序*/ printf("\t\t\tSort1Suceessed! \n"); printf("\t\t\t"); system("pause"); break; case4: printf("\t\t\tInsertaRecord\n"); n=Insert_a_record(stu,n);/*插入一条记录*/ printf("\t\t\t"); system("pause"); break; case5: printf("\t\t\tDeleteaRecord\n"); n=Delete_a_record(stu,n);/*按姓名查找,删除一条记录*/ printf("\t\t\t"); system("pause"); break; case6: printf("\t\t\tQuery\n"); Query_a_record(stu,n);/*查找并显示一个记录*/ printf("\t\t\t"); system("pause"); break; case7: printf("\t\t\tSort2\n"); Sort2_by_add(stu,n);/*按总分排序*/ printf("\t\t\t"); system("pause"); break; case8: printf("\t\t\tStatistic\n"); Statistic(stu,n); printf("\t\t\t"); system("pause"); break; case9: printf("\t\t\tWritetoaTextfile\n"); WritetoText(stu,n);/*循环写入数据*/ printf("\t\t\t"); system("pause"); break; case0: printf("\t\t\tHaveaGoodLuck,Bye-bye! \n");/*结束程序*/ printf("\t\t\t"); system("pause"); exit(0); } } } 五.设计测试流程 1、进入界面 2、输入选项1,回车; 按提示输入数据: 3、回到主菜单; 输入选项7,回车; 输入文件名: data.txt,回车; 出现成功提示,则读入文件操作成功。 4、回到主菜单,输入2,回车 每10个暂停显示数据 5、回到主菜单,输入3,回车 出现排序成功信息。 6、回到主菜单,输入4,回车 按提示插入一组数据 7、回到主菜单,输入5,回车 按提示输入姓名,删除数据 出现删除成功的信息 8、回到主菜单,输入6,回车 输入姓名进行查询 9、回到主菜单,输入7,回车 出现统计信息 10、回到主菜单 ,输入9,回车 输入result.txt,回车 出现成功写入文件的信息 11、回到主菜单,输入0,回车退出系统 六: 调试分析过程描述: 测试数据: 测试输出结果: 程序中出现的问题及解决方法: 问题一、学生初始信息模块: 其中包括学生的姓名、学号和平时成绩、期中成绩和期末成绩等相关信息;可用函数cin(stu*p1)来实现此操作。 当正确输入存在的学生学号,系统进行判断时,提示不存在此学生。 解决办法及步骤: 1、一个个输出所有的学生的学号,检查文件中是否有此学生,发现有。 2、既然有此学生,那么检查循环判断是否有此学生的语句发现没有错 3、输出
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C程序设计作业课程设计报告 成绩管理 程序设计 作业 课程设计 报告 成绩 管理