您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > C语言课程设计报告 学生成绩管理系统
C语言课程设计报告院系:机械与电子信息学院姓名:王鹏飞班号:07310126学号:20101003558指导教师:龚文引日期:2011年7月学生成绩管理系统一、题目要求设计一个学生成绩管理程序,对在校某班学生几门课程的考试成绩进行统一管理。每个学生记录包括学号、姓名、年龄、数学、英语、物理成绩,默认以学号为序存放。(1)一个文件按以班为单位存储学生记录。(2)将允许的操作分为四种,以A、B、C、D、E、F为标志(若设置菜单操作更佳):A:插入一个新的学生记录(录入学生信息);B:修改学生记录;C:删除一个学生记录;D:登记成绩;E:修改成绩;F:浏览全班成绩。(3)计算学生的总成绩。(4)按学号排序输出全班成绩表。二、需求分析根据题目要求,由于学生信息是存放在文件中,所以应提供文件的输入、输出等操作;在程序中需要浏览学生的信息,应提供添加、修改、删除、排序等操作;另外还应提供键盘式选择菜单实现功能选择。三、总体设计根据上面的需求分析,可以将这个系统的设计分为8个模块,数据输入,添加数据,修改数据,删除数据,修改成绩,学号排序,浏览成绩,退出模块.学生成绩管理系统数据输入添加数据修改数据删除数据修改成绩学号排序浏览成绩退出模块四.详细设计1、主函数【分析】将各个功能模块设置为菜单选项,方便调用,且执行完每部分功能模块后能够方便返回到系统界面.【流程图】:开始显示一系列功能选项N输入n,判断n是否是A-H间的字母Y结束【程序代码】:menu()/*主界面*/{intw1;charn;/*.变量n保存选择菜单数字,w1判断输入的数字是否在功能菜单对应数字范围内*/do{puts(\t\t***************菜单****************\n\n);puts(\t\t\t\tA.录入学生信息);puts(\t\t\t\tB.修改学生记录);puts(\t\t\t\tC.删除一个学生记录);puts(\t\t\t\tD.登记成绩);puts(\t\t\t\tE.修改成绩);puts(\t\t\t\tF.浏览全班成绩);puts(\t\t\t\tG.退出);puts(\n\n\t\t************************************\n);printf(操作选择(A-H):[]\b\b);n=getchar();printf(\n);根据n的值调用各功能模块函数if(n'A'||n'H')w1=1;/*对选择的数字作判断*/elsew1=0;}while(w1==1);switch(n)/*选择功能*/{case'A':enter();break;/*输入模块*/case'B':modify();break;/*修改模块*/case'C':delete();break;/*删除模块*/case'D':add();break;/*登记成绩模块*/case'E':modify_score();break;/*修改成绩模块*/case'F':browse();break;/*浏览模块*/case'G':exit(0);/*退出模块*/}}main()/*主函数*/{menu();}2、各功能模块设计(1)输入模块【数据分析】:单看各数据信息,学号﹑年龄以及数学﹑英语﹑物理各科成绩和总分均是整型,姓名可以采用字符型数组.数据信息存放在文件中,一条记录对应一个学生,既符合习惯也方便信息管理.把学生的学号﹑姓名﹑年龄﹑各科成绩及总分作为结构体成员,存放若干个学生信息就用结构体数组.【流程图】:输入用户要输入学生记录的个数ni从0到n-1调用输入函数input(i)Y调用保存函数save(n)i!=0【程序代码】enter()/*输入模块*/{inti,n;printf(Howmanystudents(1-%d)?:,N);scanf(%d,&n);/*要输入的记录个数*/printf(\nEnterdatanow\n\n);for(i=0;in;i++){printf(\nInput%dthstudentrecord.\n,i+1);input(i);/*调用输入函数*/}if(i!=0)save(n);/*调用保存函数*/printf_back();/*一个任务结束时让用户选择是浏览还是返回*/}(2)修改模块【分析】:该模块的功能是显示所有学生信息,考虑到记录很多,故采用分屏显示。显示完所有记录后,用户输入要修改学生的学号,根据学号查找学生记录,并提示用户修改该记录的哪部分信息,是学号、姓名、年龄或某科成绩、总分还是所有信息都修改,根据用户选择修改相应信息。【流程图】:显示所有记录,让用户看哪个要修改输入要修改的学号显示找到的记录调用修改函数提示没有找到继续修改?是否找到此记录YYYYN返回主菜单NY【程序代码】:modify()/*修改模块*/{structstudents;FILE*fp;inti,n,k,w0=1,w1,w2=0;n=load();do{k=-1;/*给用户看全部记录以便确认要修改的记录*/printf_face();/*调用显示数据结构项目函数*/for(i=0;in;i++){if((i!=0)&&(i%10==0))/*目的是分屏显示*/{printf(\n\n请输入您要修改的学生编号(No.073101-).按任意键继续...);getch();puts(\n\n);}printf_one(i);printf(\n);}do{printf(\n\n请输入您要修改的学生编号(No.073101-)!NO.:073101-);scanf(%d,&s.num);/*输入要修改的数据的学号*/for(i=0;in;i++)/*查找要修改的数据*/if(s.num==stu[i].num){k=i;/*找到要修改的记录*/s=stu[i];/*把stu[i]备份给s,以便用户反悔时恢复*/}if(k==-1)printf(\n\n记录不存在,请重新输入!);}while(k==-1);/*当k=-1表示没有找到*/printf_face();printf_one(k);/*调用显示一个记录的函数*/w1=modify_data(k,n);/*修改学生记录并且返回保存控制值w1,w1=1则表示用户已确认修改*/if(w1==1)/*确认修改*/{printf(\n修改成功!^_^.\n\n是否继续修改?\n\n\t1.是2.返回并保存\t[]\b\b);scanf(%d,&w0);w2=1;/*来控制保存,使w2=1是标记已有过修改*/}else{w0=0;/*结束*/if(w2==1)stu[k]=s;}/*没有修改,把备份的s恢复,使w0=0是为了让循环终止*/if(w0!=1&&w2==1)save(n);/*正常返回,且有过修改*/}while(w0==1);menu();}(3)删除模块【分析】:该模块的功能是与修改模块一样先显示所有的学生信息,同样考虑到记录很多,采用分屏显示。显示完所有记录后,用户输入要删除学生的学号,根据学号查找学生记录并删除。删除一般的做法是将数据从文件中删除,删除位置后面的记录往前挪。【流程图】:显示所有记录,让用户看哪个要删除输入要删除的学号是否找到此学生记录YN显示找到的记录提示没有找到使stu[k].sum=0Y继续删除?N返回主菜单【程序代码】:delete()/*删除模块*/{structstudents;FILE*fp;inti,n,k,w0=1,w1,w2=0;n=load();do{k=-1;printf_face();for(i=0;in;i++){if((i!=0)&&(i%10==0))/*分屏显示*/{printf(\n\n请输入您要删除的学生编号(No.073101-).按任意键继续...);getch();puts(\n\n);}printf_one(i);printf(\n);}do{printf(\n\n请输入您要删除的学生编号(No.073101-)!NO.:073101-);scanf(%d,&s.num);for(i=0;in;i++)if(s.num==stu[i].num){k=i;s=stu[i];/*将要删除的记录备份给s*/}if(k==-1)printf(\n\n记录不存在,请重新输入!);}while(k==-1);printf_face();printf_one(k);printf(\n确定删除?\n\n\t1.是2.此次返回,但不保存[]\b\b);scanf(%d,&w1);if(w1==1){stu[k].sum=0;/*标记为0后,保存时便不保存*/printf(\n成功删除!^_^.\n\n是否继续删除?\n\n\t1.是2.返回并保存\t[]\b\b);scanf(%d,&w0);w2=1;/*确认删除*/}else{w0=0;/*end*/if(w2==1)stu[k]=s;}if(w0!=1&&w2==1)save(n);/*正常返回且已删除*/}while(w0==1);menu();}(4)登记成绩模块【分析】:该模块的功能是用户需要增加新的学生记录,请从键盘输入并逐条写到原来的输入文件中.【流程图】:调用加载函数n=load();并计算可以记录个数n输入用户要添加学生记录的个数mK=m+ni从n到k调用输入函数input(i)保存添加的记录【程序代码】:add()/*登记成绩模块*/{inti,n,m,k;FILE*fp;n=load();printf(您要添加几个学生(1-%d)?:,N-n);scanf(%d,&m);/*输入要添加的记录个数*/k=m+n;for(i=n;ik;i++){printf(\n请输入第%d个学生数据.\n,i+1);input(i);/*调用输入函数*/}if((fp=fopen(score.txt,ab))==NULL)/*以ab方式打开文件,添加保存*/{printf(不能打开此文件.\n);}for(i=n;ik;i++)/*输出到文件*/if(fwrite(&stu[i],sizeof(structstudent),1,fp)!=1)printf(文件写入错误.\n);fclose(fp);printf_back();/*一个任务结束时的选择浏览还是返回*/}(5)修改成绩模块【分析】:该模块的功能是修改各科成绩或全体成绩。【流程图】:【程序代码】:modify_score()/*修改成绩模块*/{structstudents;FILE*fp;inti,n,k,w0=1,w1,w2=0;显示所有记录,让用户看哪个要修改输入要修改的学号显示找到的记录调用修改函数提示没有找到继续修改?是否找到此记录YYYYN返回主菜单n=load();do{k=-1;printf_face();for(i=0;in;i++){if((i!=0)&&(i%10==0))/*分屏显示*/{printf(\n\n请输入您要修改成绩的学生编号(No.073101-)!.按任意键继续...);getch();puts(\n\n);}printf_one(i);printf(\n);}do{printf(\n\n请输入您要修改成绩的学生编号(No.073101-)!NO.:073101-);scanf(%d,&s.num);/*输入要修改的学生学号*/for(i=0;in;i++)if(s.num==stu[i].num){k=i;s=stu[i];/*将要修改的记录备份*/}if(k==-1)printf(\n\n记录不存在,请再次输入!);}while(k==-1);printf_face();printf_one(k);w1=modify_score1(k);/*调用修改成绩函数*/if(w1==1){printf(\n修改成功!^_^.\n\n是否继续修改成绩?\n\n\t1.是2.保存并返回\t[]\b\b);scanf(
本文标题:C语言课程设计报告 学生成绩管理系统
链接地址:https://www.777doc.com/doc-3259599 .html