《C语言学习知识学生成绩管理方案计划系统.doc》由会员分享,可在线阅读,更多相关《C语言学习知识学生成绩管理方案计划系统.doc(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、!-学生成绩管理系统1 系统分析1.1 课程设计内容设计一学生成绩管理系统,功能包括:1. 输入数据:可输入学生姓名、学号、及多门(至少5门)课程的成绩。(先将所有学生的姓名、学号输入完后,再逐科输入成绩)2. 编辑数据:可添加、删除、修改数据。3. 计算:计算出每个学生的总分及平均成绩;计算每门课程平均成绩。4. 查询:可按姓名、学号查询;可查询不及格的学生名单。5. 排序:可按姓名、学号、总分排序6. 浏览:可浏览输入、查询或排序后的数据。7. 文件操作:可打开、保存、关闭数据文件。1.2 系统功能需求分析本系统应具有以下功能:1、数据输入功能:可输入学生人数、姓名、学号、数学成绩、英语成
2、绩,语文成绩、物理成绩、电脑成绩,输入后自动保存学生数据。2、数据添加、修改、删除功能:可以添加多名学生信息,包括姓名、学号、各科成绩等待,可以修改某学生的全部信息,也可以删除某学生的全部信息。3、计算功能:可以计算出每个学生的总分以及平均成绩,也可以计算出全部学生的各科的平均成绩。4、查询功能:可按姓名、学号查询到某个学生的信息,可以输出不及格的学生名单。5、排序功能:可以按学生姓名、学号、总分对全部学生排序。6、浏览功能:可浏览输入、查询或排序后的数据。7、文件功能:可以新建文件,打开文件。8、关闭系统。2 系统设计2.1 总体设计按系统分析的功能要求将系统划分为以下几个主要功能模块:2.
3、2 详细设计1、主函数main()利用While循环语句和switch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。2、菜单函数 menu() 通过菜单函数显示可选择的菜单,每次操作完后按任意键回到菜单函数。3、新建文件函数 new_file() 通过该函数实现新建文件、输入学生数据功能。4、编辑数据函数 edit_data()该函数下还有3个函数,通过switch()功能去选择其包含3个函数去实现不同的功能。3个函数分别是 添加学生数据函数add_data()、删除学生信息函数del_data()、修改学生信息函数mod_data()。5、计算函数calculate () 通
4、过该函数计算每个学生的平均成绩及总成绩,计算出每科的平均成绩,并显示出来。 6、查询函数search() 该函数包含3个子涵数,分别按照姓名查询函数search_name():、按照学号查询函数search_num()、查询不及格名单函数search_fail()。通过switch()来选这3个函数去实现不同的查询功能。7、排序函数sort() 该函数包含3个子函数,分别按照姓名排序函数sort_name()、按照学号排序函数sort_num()、按照分数高低排序函数sort_score(),通过switch()来选择这3个函数,每个函数排序好后会显示出来。8、浏览函数browse()通过该函
5、数可以查看可浏览输入、查询或排序后的数据。9、打开文件函数open_file() 通过该函数可以打开已经保存的文件,查看里面的数据。10、保存函数save() 把该函数放在子函数末尾,比如放在排序函数,编辑函数等函数内容的末尾,这个就可以实现将修改后的数据保存下来。11、清屏函数clrscr()通过该函数可以独立显示每个函数的内容。12、返回菜单函数return_menu()这个函数反正子函数里面,当子函数操作完后,通过该函数可按任意键返回到目录。13、定义一个结构体struct student stuSIZE这样就可以将不同类型的数组组合成一个有机的整体,以便引用,还可以通过SIZE的大小来
6、控制最多可输入的学生人数。3 系统运行菜单界面:输入数据:删除数据:计算数据:按姓名排序后的数据:按姓名排序:打开文件: 4 总结 本次设计达到了设计要求的基本内容,各功能都能正常运行,设计的系统使用方法容易理解,界面清晰但不够华丽,没有设计到要求以外的其它功能。设计过程中文件操作这一部分把我难住了,由于之前没有系统地去学这一块,自己只有看书,问同学来了解,搞了很久才完成这一块。还有输入错误检查这一部分做得不好。通过一个多星期的C语言课程设计,感觉自己收获了不少。首先学会了一些书本没学到的函数,比如clrscr()等。我对各函数的作用有更加进一步的了解,熟悉了函数之间的调用关系。懂得了冷静地去
7、处理编译时出现的问题。从这里我也得到一个体会,做一个程序,或者开发一个软件,应该着重从它的后台制作入手,不能做出一个中看不中用的程序或者软件,写的程序往往是很长的,有时候面对几百行的程序甚至数千行的程序,自己也会看傻,这就需要我们在设计时要有耐心,适当地做下注释。这次课程设计对我以后在单片机编程这一块打下了很好的基础,对我以后的学习有很大的帮助。参考文献C程序设计(第三版)谭浩强 编著C程序设计题解与上机指导(第三版)谭浩强 编著附录:代码#include stdio.h#include #include /* 包含 exit()*/#define SIZE 100 int i,number;
8、FILE *fp,*fp1;struct studentchar name20;char num10;int math;int english;int Chinese; int physics;int computer;int total;int average;stuSIZE; void save() /*将数据储存于文件*/FILE *fp;int j;if(fp=fopen(stu_list,wb)=NULL)printf(cannot open filen);return;for(j=0;jSIZE;j+)if(fwrite(&stuj,sizeof(struct student),1
9、,fp)!=1)printf(file write errorn);fclose(fp);void return_menu() /*返回菜单*/printf(nntPress any key to return to menu.);getch();void menu() /*菜单*/int i; clrscr(); gotoxy(1,3); for(i=0;i37;i+) printf( *); printf(nnn 1.Set up new filen); printf( 2.Edit datan); printf( 3.Calculationn); printf( 4.Searchn);
10、printf( 5.Sortn); printf( 6.Browsen); printf( 7.Open filen); printf( 0.exitn); printf(nn); for(i=0;i37;i+) printf( *); printf(nn Please select the menu:); void new_file() /* 输入数据*/ int i,j,sum; char file_name10; for(i=0;i37;i+) printf(* ); clrscr(); printf(nn Please input the file name:); scanf(%s,&
11、file_name); fp=fopen(file_name,w); /* 向文件写数据*/ printf(n Successed to creat file); printf(nn Please input the number of students: ); scanf(%d,&number); for(i=0;inumber;i+) printf(n Please input the name of the student:);scanf(%s, stui.name); printf( Please input the number of students learning: );sca
12、nf(%s, stui.num);printf( Please input the mathematics score:);scanf(%d, &stui.math);printf( Please input English score:);scanf(%d, &stui.english);printf( Please input the mathematics score:);scanf(%d, &stui.Chinese);printf( Please input the physical score:);scanf(%d, &stui.physics);printf( Please in
13、put the computer score:);scanf(%d, &puter); fprintf(fp,%d,number); for(i=0;inumber;i+) fprintf(fp,n%s %s %d %d %d %d %d,stui.name,stui.num,stui.math,stui.english,stui.Chinese,stui.physics,puter); /*将学生信息输出到文件上*/ fclose(fp); /*关闭文件*/ /*save();*/ printf(nn Press any key to return to the menu); getch()
14、; void edit_data() /*编辑数据*/void add_data();void del_data();void mod_data();int i;clrscr();printf(nn 1.Add datan);printf( 2.Delete datan);printf( 3.Modify data n);printf( 4.Return to menun);printf(nn You choice is:);scanf(%d,&i);switch(i) case 1:add_data();break; case 2:del_data();break; case 3:mod_d
15、ata();break; case 4:return_menu();break; default:printf(No this choice); void add_data() /*添加数据*/int i,n;char fname10;clrscr();printf(nntPlease input the file name which you want to add data:);scanf(%s,fname);fp=fopen(fname,r); /*读入文件*/fscanf(fp,%d,&number); /*从文件读出学生人数*/ for(i=0;inumber;i+) fscanf(
16、fp,%s %s %d %d %d %d %d,stui.name,stui.num,&stui.math,&stui.english,&stui.Chinese,&stui.physics,&puter); /*从文件读入学生各项信息*/ fclose(fp); printf(nn Please input the add number of students: ); scanf(%d,&n); for(i=number;inumber+n;i+) printf(n Please input the name of the student:);scanf(%s, stui.name); pr
17、intf( Please input the number of students learning: );scanf(%s, stui.num);printf( Please input the mathematics score:);scanf(%d, &stui.math);printf( Please input English score:);scanf(%d, &stui.english);printf( Please input the mathematics score:);scanf(%d, &stui.Chinese);printf( Please input the ph
18、ysical score:);scanf(%d, &stui.physics);printf( Please input the computer score:);scanf(%d, &puter); number=number+n; fp=fopen(fname,w); fprintf(fp,%d,number); for(i=0;inumber;i+) /*将学生信息输出到文件上*/ fprintf(fp,%s %s %d%d %d %d %d,stui.name,stui.num,stui.math,stui.english,stui.Chinese,stui.physics,puter
19、); fclose(fp); save(); printf(nn Press any key to return to the menu); getch(); void del_data() /* 删除数据*/int i,k,n;char name10,c;char fname10;clrscr();printf(nntPlease input the file name which you want to delete data:);scanf(%s,fname);fp=fopen(fname,r);fscanf(fp,%d,&number); for(i=0;inumber;i+) /*把
20、学生信息读进来*/ fscanf(fp,%s %s %d %d %d %d %d,stui.name,stui.num,&stui.math,&stui.english,&stui.Chinese,&stui.physics,&puter); fclose(fp);printf(toriginal data:);printf(nnname num math englis Chinese physics computern); for(i=0;inumber;i+) printf(%-10s%-10s%-10d%-10d%-10d%-10d%-10dn,stui.name,stui.num,st
21、ui.math,stui.english,stui.Chinese,stui.physics,puter); printf(ntPlease input the students name which you want to delete: );scanf(%s,name);for(i=0;inumber;i+) if(strcmp(name,stui.name)=0) /*将学生信息向前移一位*/ strcpy(stui.name,stui+1.name); strcpy(stui.num,stui+1.num); stui.math=stui+1.math; stui.english=st
22、ui+1.english; stui.Chinese=stui+1.Chinese; stui.physics=stui+1.physics; puter=stui+puter; printf(ntthe new data:); printf(nnname num math englis Chinese physics computern); for(i=0;inumber-1;i+) printf(%-10s%-10s%-10d%-10d%-10d%-10d%-10dn,stui.name,stui.num,stui.math,stui.english,stui.Chinese,stui.p
23、hysics,puter); number-; fp=fopen(fname,w); fprintf(fp,%d,number); for(i=0;inumber;i+) /*将删除后的信息写到文件上*/ fprintf(fp,%s %s %d%d %d %d %d,stui.name,stui.num,stui.math,stui.english,stui.Chinese,stui.physics,puter); fclose(fp); save(); printf(nn Press any key to return to the menu);getch();void mod_data()
24、 /*修改数据*/char name10;char fname10;clrscr();printf(nntPlease input the file name which you want to modify data:);scanf(%s,fname);fp=fopen(fname,r);fscanf(fp,%d,&number); for(i=0;inumber;i+) fscanf(fp,%s %s %d %d %d %d %d,stui.name,stui.num,&stui.math,&stui.english,&stui.Chinese,&stui.physics,&puter);
25、 fclose(fp);clrscr();printf(nn Please input the students name who you want to modify:);scanf(%s,name);for(i=0;inumber;i+) if(strcmp(name,stui.name)=0) printf(n Please input the new name of the student:);scanf(%s, stui.name); printf( Please input the new number of students learning: );scanf(%s, stui.
26、num);printf( Please input the new mathematics score:);scanf(%d, &stui.math);printf( Please input new English score:);scanf(%d, &stui.english);printf( Please input the new mathematics score:);scanf(%d, &stui.Chinese);printf( Please input the new physical score:);scanf(%d, &stui.physics);printf( Pleas
27、e input the new computer score:);scanf(%d, &puter); fp=fopen(fname,w); fprintf(fp,%d,number); for(i=0;inumber;i+) fprintf(fp,%s %s %d%d %d %d %d,stui.name,stui.num,stui.math,stui.english,stui.Chinese,stui.physics,puter); fclose(fp); save();printf(nn Press any key to return to the menu);getch();void
28、calculate (int n) /*计算*/ int i,math_ave=0,english_ave=0,chinese_ave=0,physics_ave=0,computer_ave=0;clrscr();printf(nnEvery students total score and average score are:nn);printf(name tatal averagen);for(i=0;in;i+)stui.total=stui.math+stui.english+stui.Chinese+stui.physics+puter; stui.average=stui.tot
29、al/5; printf( %-10s %-10d %-10d n,stui.name,stui.total,stui.average); for(i=0;in;i+) math_ave=(math_ave+stui.math); math_ave=(math_ave/n); for(i=0;in;i+) english_ave=(english_ave+stui.english); english_ave=(english_ave/n); for(i=0;in;i+) chinese_ave=(chinese_ave+stui.Chinese); chinese_ave=(chinese_a
30、ve/n); for(i=0;in;i+) physics_ave=(physics_ave+stui.physics); physics_ave=(physics_ave/n); for(i=0;in;i+) computer_ave=(computer_ave+puter); computer_ave=(computer_ave/n);printf(nmath average is:%dn,math_ave);printf(english average is:%dn,english_ave);printf(chinese average is:%dn,chinese_ave);print
31、f(physics average is:%dn,physics_ave);printf(computer average is:%dn,computer_ave);printf(nn Press any key to return to the menu);getch();void search() /*查询*/void search_name();void search_num();void search_fail();int i;clrscr();printf(nn1.Search student message by namen);printf(2.Search student mes
32、sage by numbern);printf(3.Search the student whos score lower 60n);printf(4.Return to menun);printf(nn Your choice is:);scanf(%d,&i);switch(i) case 1:search_name();break; case 2:search_num();break; case 3:search_fail();break; case 4:return_menu();break; default:printf(errorn); void search_name() /*按
33、姓名查询*/int i;char name10;char mark=1;clrscr();printf(nn Please input the students name:);scanf(%s,name);for(i=0;inumber;i+) if(strcmp(name,stui.name)=0) printf(nstudent name:%sn,stui.name); printf(student number:%sn,stui.num); printf(student math score:%dn,stui.math); printf(student english score:%dn
34、,stui.english); printf(student chinese score:%dn,stui.Chinese); printf(student physics score:%dn,stui.physics); printf(student computer score:%dn,puter); mark=0; if(mark=1) printf( No this studentn); printf(nn Press any key to return to the menu); getch();void search_num() /*按学号查询*/int i;char num10;
35、char mark=1;clrscr();printf(Please input the students num:);scanf(%s,num);for(i=0;inumber;i+) if(strcmp(num,stui.num)=0) printf(student name:%sn,stui.name); printf(student number:%sn,stui.num); printf(student math score:%dn,stui.math); printf(student english score:%dn,stui.english); printf(student c
36、hinese score:%dn,stui.Chinese); printf(student physics score:%dn,stui.physics); printf(student computer score:%dn,puter); mark=0; break; if(mark=1) printf( No this numn); printf(nn Press any key to return to the menu); getch();void search_fail() /* 查询不及格名单*/int i;for(i=0;inumber;i+) if(stui.math60)|
37、(stui.english60)|(stui.Chinese60)|(stui.physics60)|(puter60) printf(nn The student who fail is:%s,stui.name); printf(nn Press any key to return to the menu);getch(); void sort() /*排序*/void sort_name();void sort_num();void sort_score();int i;clrscr();printf(nn 1.Sort by namen);printf( 2.Sort by numn);printf( 3.Sort by total scoren);printf( 4.Return to menun);printf(nn Your choice is:);scanf(%d,&i);switch(i) case 1:sort_name();break; case 2:sort_num();break; case 3:sort_score();break; case 4:return_menu();break; default:printf