课程设计报告
学生成绩管理系统
院系: 信息技术学院 专业: 计算机科学与技术 班级: 08级计科班 完成日期: 2009年1月03日
设计题目:学生成绩管理系统
1.题目描述
设计一个简单的学生成绩管理系统,要求有简单的界面,程序段要分清模块, 该程序应该:
(1)输入学生成绩,求总分,平均分,以及排序。 (2)查询学生单科成绩,总分和平均成绩; (3)添加、修改学生成绩具有下列功能: (4)实现保存与查看功能
2.算法设计/设计思想
利用二维数组——定义stu[][]存储学生学号、各科成绩,总分,平均分,名次,利用文件来存
储,读取数据。
具体分工是:
: 负责inputx(),print1(),input();
:负责文件的存储和读取,main(),System(),Idea()以及各调用函数之间的连; : 负责find1(),find2(),find3(),find31(),Find(); : 负责del(),add(),change1(),Change(); 后期调试由小组共同负责。
3. 结构框图、各模块的功能描述
3.1 创建成绩表
3.1.1 input()功能是输入学生的信息,便于以后的查询、浏览。 3.2 添加
3.2.1 add( )功能是向inputy()添加新的内容。 3.3.2 chance( )对单科成绩进行修改。 3.3 查询
3.3.1 可根据学号,科目,名次,进行查询。
3.3.2 查询内容包括:该学生的各课成绩、、平均分。 3.4 删除
3.4.1可以输入学号删除一名学生的一课成绩。。 3.5 浏览成绩单
3.5.1 通过此print1()可以查看所有学生的各课成绩、总分、平均分和名次。 3.6 文件()
3.6.1 保存以上所输入的信息以达到既是关闭窗口信息也不会丢失信息的目的。 3.6.2 随时打开,修改文件。 3.7.退出功能是退出
主菜单
意见评述 功能菜单 退出系统 输入成绩 查找功能 添加及改功能 退出功能菜单 输学生成绩 排学生成绩 查找某生成绩 查某段成绩 添加成绩 修改某科成绩
1、
按学号查找 按名次查找 按科目查找 四、主体思想:
考虑到此程序量大代码多,所以用函数调用,分几个人去完成。
在输入学生成绩的时候,想到学生人数不固定,所以在程序开头定义一个符号常量代表学生人数,可以随时更改。
考虑到查找模块和添加修改模块要用到输出成绩模块所以要建文件进行保存并能被其他模块调用所以要用指针。
要反复回到主菜单,所以用到GOTO功能,壁景的好看用到了CONIO.H 函数。
2、 3、 4、
5、 6、
在成绩输入和排序时,要用FOR循环,甚至FOR的三重嵌套。 为了给读者带来方便,所以关于提示语全用中文。
五、程序的N_S流程图
1、学生成绩的求和求平均,及名次 定义 i ,j, t, k, m For i=0 to stu-1 a[i][6]=0 For j=1to 5 a[i][6]+=a[i][j] a[i][7]=a[i][6]/5
For i=0 to stu-1 K=I a[i][8]=i+1 For j=i+1 to stu If a[j][6]>a[k][6] k=j For m=0 to 7 t=a[k][m] a[k][m]=a[i][m] a[i][m]=t 输出学生成绩
2、删除学生成绩 定义 i j m 读写文件 输入要删的学号m For i=0 to stu-1 If a[i][0]=m For j=0;j<9;j++ a[i][j]=0 调用print1 输出成绩表
3添加学生成绩
定义n, i 读写文件 输入添加人数n For i=stu to stu+n For j=o to 6 输入添加的各科成绩a[i][j] J++ I++ 调用print1 重新输入人数stu 重新输出成绩
4 修改学生某科成绩
定义m,b,c, 输入要修改的学号m 输入要修改的科目b For i=0 to stu-1 if (m!=a[i][0]) n++ Else {n++;break} a[n][b+1]=c 调用print1输出学生成绩
5查询成绩 按名次查询 定义 n,I,j 输入名次:n i=0 i /****头文件*****/ #include /**************变量的定义**************/ int b,c,i,j,k,m,n,t,w,z,stu,a[100][10]; long num; int *p; char ch,filename[10]; FILE *fp,*fp1; /******************函数的声明*******************/ main(); /*主函数*/ System(); /*功能菜单*/ Input(); /*函数的输入*/ inputx(); /*成绩的输入*/ Find(); /*成绩的查询*/ find1(); /*按名次查询*/ find2(); /*按学号查询*/ find3(); /*选择查询科目*/ find31(); /*按分数段查询*/ Change(); /*添加、修改*/ add(); /*成绩的添加*/ del(); /*成绩的删除*/ change(); /*成绩的修改*/ Idea(); /*意见评述*/ /***************程序代码***************/ /******************输入学生成绩***************/ inputx() { textbackground(5); textcolor(2); clrscr(); gotoxy(25,9); printf(\"Please input the filename:\"); scanf(\"%s\ gotoxy(27,13); printf(\"请输入你们班学生人数:\"); scanf(\"%d\ if((fp=fopen(filename,\"w\"))==NULL) {printf(\"Cannot open the file\"); exit(0); } clrscr(); gotoxy(30,2); printf(\"请输入学生成绩\"); putchar('\\n') ; printf(\" 学号 高数 外语 C言 for(i=0;i<=stu-1;i++) {for(j=0;j<=5;j++) {gotoxy(8*(j+1),i+4); scanf(\"%6d\ fputc(a[i][j],fp); } printf(\"\\n\"); } } /*******输出成绩表,并求总分,平均成绩*******/ print1() 组装 中医\\n\"); { for(i=0;i<=stu-1;i++) /*求总分和平均分*/ { a[i][6]=0; for(j=1;j<=5;j++) a[i][6]+=a[i][j]; a[i][7]=a[i][6]/5; } for(i=0;i for(j=i+i;j<=stu;j++) if(a[j][6]>a[k][6]) k=j; for(m=0;m<=7;m++) {t=a[k][m]; a[k][m]=a[i][m]; a[i][m]=t; } } for(i=0;i<=stu-1;i++) {for(j=0;j<=8;j++) printf(\"%7d\ printf(\"\\n\"); } fprintf(fp,\" 学号 高数 外语 C言 组装 中医 总分 平均分 排名\\n\"); for(i=0;i<=stu;i++) {for(j=0;j<=8;j++) fprintf(fp,\"%4d\ fputc(a[i][j],fp); fprintf(fp,\"\\n\"); } fclose(fp); } /********************各科总分 及平均分**********************/ Input() { inputx(); clrscr(); printf(\" 输出学生成绩\"); gotoxy(3,2); for(i=1;i<=65;i++) printf(\"%\"); putchar('\\n'); printf(\" 学号 高数 外语 C言 组装 中医 总分 平均分 名次\\n\"); print1(); getch(); clrscr(); gotoxy(35,13); printf(\"谢谢使用此程序\\n\") ; getch(); } /*************按名次查询*******************/ find1() { printf(\"请输入名次\\n\"); scanf(\"%d\ printf(\" 学号 高数 外语 C言 组装 中医 总分 平均分 排名\\n\"); for(i=0;i printf(\"%6d\ getch(); Find(); } /******************按学号查询**********************/ find2() { printf(\"请输入所要查询学生的学号\\n\") ; scanf(\"%d\ printf(\" 学号 高数 外语 C言 组装 中医 总分 平均分 排名\\n\"); for(i=0;i printf(\"%6d\ getch(); Find(); } /**********************按科目查询**************************/ find31() { printf(\"请输入你要查询的成绩段\\n\"); scanf(\"%d %d\ printf(\" 学号 高数 外语 C言 组装 中医 总分 平均分 排名\\n\"); for(i=0;i printf(\"%6d\ printf(\"\\n\"); } getch(); Find(); } /**************查询的科目*****************/ find3() { printf(\"现有五种科目共查询:\\n\") ; printf(\"1 高数 2 外语 3 C言 4组装 5 中医\\n\") ; printf(\"请选择:\"); scanf(\"%d\ /*选择科目*/ switch(n) {case 1: find31(); case 2: find31(); case 3: find31(); case 4: find31(); case 5: find31(); default: clrscr(); gotoxy(35,8); printf(\"Errors\"); gotoxy(22,14); printf(\"Please press any keyboard to back\"); Find(); } getch(); } /*****************成绩的查询********************/ Find() { textbackground(14); textcolor(13); clrscr(); gotoxy(35,3); printf(\"查询菜单\\n\"); gotoxy(25,7); printf(\" 1 按学生名次查询\"); gotoxy(25,9); printf(\" 2 按学生学号查询\"); gotoxy(25,11); printf(\" 3 查询单科成绩段\"); gotoxy(25,13); printf(\" 0 退回到功能菜单\"); for(t=1;t<=40;t++) {{gotoxy(20+t,5); printf(\"\\001\");} {gotoxy(20+t,15); printf(\"\\001\");} } putchar('\\n'); printf(\"Please input your choice:\"); scanf(\"%d\ if(m==1) find1(); else if(m==2) find2(); else if(m==3) find3(); else if(m==0) System(); else if(m!=1 && m!=2 && m!=3 && m!=0) Find(); } /****************成绩的添加*********************/ add() /*成绩的添加*/ { fp=fopen(filename,\"rb\"); /*打开刚才输入的成绩*/ printf(\"请输入你要添加的人数:\"); scanf(\"%d\ printf(\"请输入你要添加的成绩\\n\"); printf(\" 学号 高数 外语 C言 组装 中医\\n\"); for(i=stu;i<(stu+n);i++) {for(j=0;j<6;j++) {gotoxy(8*(j+1),i+8); scanf(\"%4d\ } printf(\"\\n\"); } clrscr(); gotoxy(30,12); printf(\"请输入你们班学生人数:\"); scanf(\"%d\ clrscr(); printf(\" 重新输出学生成绩\\n\"); printf(\" 学号 高数 外语 C言 组装 中医 总分 平均分 排名\\n\"); print1(); getch(); clrscr(); Change(); } /***************成绩的删除*******************/ del() { clrscr(); fp=fopen(filename,\"rb\"); printf(\"请输入你要删除的学号\\n\"); scanf(\"%d\ for(i=0;i printf(\" 重新输出学生成绩\\n\"); printf(\" 学号 高数 外语 C言 组装 中医 总分 平均分 排名\\n\"); print1(); getch(); Change(); } /*****************成绩的修改*********************/ change1(n) { int p; fp=fopen(filename,\"rb\"); printf(\"输入学号:\"); scanf(\"%d\ printf(\"请输入你改的成绩:\"); scanf(\"%d\ for(i=0;i printf(\" 学号 高数 外语 C言 组装 中医 总分 平均分 排名\\n\"); print1(); getch(); Change(); } change() /*选择修改方式*/ { int n; clrscr(); printf(\"你可以有以下修改方式 1 高数 2 外语 3 C言 4 组装 5 中医\\n\"); printf(\"请选择修改方式:\"); scanf(\"%d\ change1(n); } /****************添加、修改菜单**********************/ Change() { clrscr(); printf(\"\\n现在您将会遇到以下几种情况:\\n\"); printf(\"1 添加; 2 删除; 3 修改; 0 返回;\\n\"); printf(\"请您根据需要按键选择:\"); scanf(\"%d\ /*选择菜单*/ if(n==1) add(); else if(n==2) del(); else if(n==3) change(); else if(n==0) System(); } /******************功能菜单*******************/ System() { B: { textbackground(10); textcolor(12); clrscr(); gotoxy(25,3); for(i=1;i<=30;i++) printf(\"$\"); gotoxy(36,6); printf(\"功能菜单\"); gotoxy(32,9); printf(\"<1>: 成绩的输入\"); gotoxy(32,12); printf(\"<2>; 成绩的查询\"); gotoxy(32,15); printf(\"<3>; 添加、修改\"); gotoxy(32,18); printf(\"<0>; 退回主菜单\"); gotoxy(15,21); for(i=1;i<=53;i++) printf(\"$\"); gotoxy(25,23); printf(\"Please input your choice:\"); scanf(\"%d\ } switch(j) {case 1: Input(); goto B; case 2: Find(); goto B; case 3: Change(); goto B; case 0: break; default: clrscr(); gotoxy(35,8); printf(\"Errors\"); gotoxy(22,14); printf(\"Please press any keyboard to continue\"); getch(); goto B; } } /*********************意见评述********************/ Idea() { textbackground(14); textcolor(10); clrscr(); gotoxy(25,13); {printf(\"Please input your filename:\"); scanf(\"%s\ } if((fp1=fopen(filename,\"w\"))==NULL) {printf(\"Cannot open file\\n\"); exit(0); } clrscr(); gotoxy(36,3); printf(\"意见评述\"); putchar('\\n'); for(i=1;i<=80;i++) printf(\"^\"); gotoxy(40,5); printf(\"(请用English书写,以#号键结束)\\n\"); getch(); do {ch=getchar(); if(ch=='#') continue; fputc(ch,fp1); }while(ch!='#'); fclose(fp1); clrscr(); gotoxy(20,13); printf(\"Please press any keyboard to back main menu \"); getch(); } /****************主函数******************/ main() { A: { textbackground(13); /*背景颜色为黄色*/ textcolor(15); /*字符颜色为绿色*/ clrscr(); /*清屏*/ printf(\"\\n ***欢迎使用学生成绩管理系统***\\n\"); for(i=5;i<=72;i++) {gotoxy(i,4); printf(\"*\"); } printf(\"\\n\"); for(i=1;i<=60;i++) {gotoxy(8+i,6); printf(\"#\"); gotoxy(8+i,21); printf(\"#\"); } for(i=1;i<=16;i++) {gotoxy(9,5+i); printf(\"#\"); gotoxy(68,5+i); printf(\"#\"); } gotoxy(35,9); printf(\"主菜单\"); gotoxy(25,12); printf(\" !<1> 功能菜单\"); gotoxy(25,15); printf(\" !<2> 意见评述\"); gotoxy(25,18); printf(\" !<0> 退出系统\"); gotoxy(5,23); printf(\"Please input your choice:\"); scanf(\"%d\} switch(k) {case 1: clrscr(); System(); goto A; case 2: clrscr(); Idea(); goto A; case 0: break; default: textbackground(6); textcolor(2); clrscr(); gotoxy(35,8); printf(\"Errors\"); gotoxy(20,15); printf(\"Please press any keyboard to continue\"); getch(); goto A; } printf(\" Quit ?\\n\"); printf(\" Press 1(Yes) or 2(No) :\");/* 数字1表示退出。 数字2表示不退出回到主菜单 其他数字表示错误回到主菜单。*/ scanf(\"%d\ switch(j) {case 1: clrscr(); gotoxy(30,8); printf(\"Thank you to use\\n\"); gotoxy(22,15); printf(\"Please press any keyboard to leave\"); getch(); break; case 2: goto A; default: clrscr(); gotoxy(35,8); printf(\"Errors\"); gotoxy(20,15); printf(\"Please press any keyboard to back main main\"); getch(); goto A; } } 七 作业抓图 (1)主函数 (2)成绩的输出 (3)成绩的查询 (4)成绩的删除 (5)意见评述 八.实验心得 1 写程序前要分析功能需求,依据需求构造出整体系统,即一个大的功能模块; 因篇幅问题不能全部显示,请点此查看更多更全内容