学院《程序设计与算法语言》课程设计报告书题目学生信息管理系统院系名称学院数学与物理系专业(班级)信息与计算科学姓名(学号)何乐(1107011004)指导教师钱泽强完成时间 2013-01-10一、问题描述在学校对学生的管理中,要掌握每个班级学生的一些基本信息,需要建立一个基本的学生管理系统。
这个系统可以管理学生的一些基本信息,学号,学生科目的成绩;可以对学生的、学号基本信息录入,修改,注销,成绩的录如,和信息的修改。
二、基本要求1、利用结构体数组实现学生信息的数据结构设计2、系统的各个功能模块要求用函数形式实现3、使用学生管理系统对学生一些基本信息的管理4、结构体成员中包括学生的学号、年龄、名字、所学的科目5、学生信息管理系统应该提供以下功能a、学生基本信息的录入b、学生基本信息的修改c、学生成绩的录入d、修改成绩e、浏览f、退出三、算法思想本程序中包括了11个函数和一个清屏函数1、student-new2、student-del3、student-edit4、score-input5、score-edit6、brower7、page-title8、return-confirm9、search-id10、sort-it11、main在函数page-title中形参menu-item被声明为char *类型的指针变量,其中函数page-title在函数1、2、3、4、5、6,和主函数11中被调用。
调用函数7时,函数分别将实参(字符串的首地址)传递给menu-item,使menu-item指向字符串的首地址,在函数中输出字符串。
函数return-confirm中定义是一个无形参的函数,其中函数return-confirm在函数1、2、3、4、5被调用。
函数student-new是无形参的函数,在函数student-new中,当学号不等于0,n不大于班级学生的总人数是执行函数,采用遍历分别实现学号、、年龄的录入。
在录入学生的基本信息后执行函数8,返回主菜单。
函数search-id函数定义为int型无形参,定义变量i为当前输入的学号,采用遍历法实现当前的学号与系统已保存的学号比较,当输入的学号已在在系统保存中并且输入的学号不等于0时显示学生的信息再返回学号,否者就显示错误或者学号不存在返回-1,其中search-id在函数2、3、5中被调用。
函数student-del是无形参函数,定义n为int型,调用search-id函数并将返回值赋值给n,如果n不等于-1,,将0赋值给student[n].id(学号),实现这个学号学生信息的注销。
在实现学生信息的注销后,执行函数8,返回主菜单。
函数student-edit是无形参的函数,定义n为int型,调用search-id函数并将返回值赋给n。
如果n不等于-1实现学生新信息的输入,依次录入学号、、年龄。
在新信息录入后调用函数8,返回主菜单。
函数score-input 为无形参的函数,当student[n].id不等于0时执行swith语句,从键盘上输入一个数字,并赋给变量s,swtich得到s的值并把它和各case中的值比较,如果和其中之一相同,则执行该case后面的语句,分别进行各个科目成绩的录入。
然后调用函数8返回主菜单。
函数score-edit是无形参的函数,定义n为int型,调用search-id函数并将返回值赋给n。
如果n不等于-1重新进行此学号学生成绩的录入,实现成绩的修改。
然后调用函数8返回主菜单。
函数sort-it形参定义为char型函数,采用for 语句进行遍历,执行swith语句,分别讲学生的学号,各科目的成绩,和总成绩分别赋给数组t[n],再使用选着排序对数组按学号从前到后,成绩从高到底进行重新排序,先使用for进行遍历,先输入一个数组t[n]的一个下标,当下标小于总人数时,将0先赋给x,-1先赋给p,此后再套用一个for语句再进行一次遍历,当下标小于总人数时先判断此数组的元素是否大于x,如果大于x再将x的值赋给数组元素,将数组元素的下标赋给p,直到找到数组元素中最大的值,之后将-1赋给数组t[p],将p赋给INDEX[n]再进行下一次的比较。
函数browser是无形参函数,先调用sort-it函数并将实参字符‘1’传递给形参nn,进行一次学号的排序。
再进行永真循环,采用for语句进行一次遍历,如果INDEX[n]不等于-1,将INDEX[n]赋给x,分别输出学生的学号,,年龄,各科成绩和总分。
再从键盘上输入一个字符赋给k,如果k在字符‘0’到‘6’之间调用sort-it函数并将实参k传递给形参nn进行其他方式的排序,否则退出。
在主函数中,采用一个swith语句,从键盘上输入一个字符,并把它赋值给case中给定的值相比较如果与其中之一相同,则执行该case后面的语句(调用函数)。
四系统模块图和模块划分1、page-title函数功能:显示字符串参数:无2、return-confirm功能:显示字符串,并提示按任意键返回函数主菜单参数:无3、student-new函数功能:实行学生信息学号、、年龄的录入参数:n为int型表示学生的人数4、search-id函数功能:得到一个函数的返回值参数:n,i都为int型,其中n是系统已录入的学生人数,i是重新输入的学号 5、student-edit函数功能:注销学生的基本信息参数:n为int型,n为系统已存在的学生人数6、student-edit函数功能:重新编辑学生的基本信息参数:n为int型,n系统已存在的学生人数7、score-input函数功能:学生成绩的录入参数:s,n,t都为int型,s代表的科目,n是系统已存在的学生人数,t代表的是要录入的学生科目的成绩8、score-edit函数功能:学生成绩的修改参数:n为int型,n是已录入系统的学生人数9、sort-it函数功能:按学号从高到低进行选择排序参数:n、m、p、x、t[53]为int型,n是已录入系统的学生人数,t[53]为储存学号的数组10、browser函数功能:浏览已录入的学生信息参数:n,x为int型,k为char型,n是已录入系统的学生人数,x为学号所对应的数组的下标,k是当调用sort-it函数时传递为形参的值,进行swith语句选择五源程序#include <stdio.h>#include <stdlib.h>#include <conio.h>int INDEX[53];struct STUDENT{int id;int age;int chinese,math,english;char name[21];}students[53]; //结构体void page_title(char *menu_item){ printf("学生管理系统 \n %s",menu_item); }void return_confirm(void){ printf("按任意键返回");getch();}void student_new(void) //录入学生信息{ int n;page_title("录入学生基本信息");for(n=0;n<53;n++)if(students[n].id==0) break;printf("学号:");scanf("%d",&students[n].id);printf(":");scanf("%s",&students[n].name);printf("年龄:");scanf("%d",&students[n].age);return_confirm();}//1int search_id(void) //查找学生{ int n,i;printf("请输入学生学号:");scanf("%d",&i);for(n=0;n<53;n++){if(students[n].id==i&&students[n].id!=0){printf("学号:%d",students[n].id);printf(":%s",students[n].name);printf("年龄:%d",students[n].age);return n;}}printf("输入错误或学号不存在.");return -1;}void student_del(void) //注销学生信息{ int n;page_title("注销学生基本信息");if((n=search_id())!=-1) students[n].id=0;printf("!该学生已注销.");return_confirm();}//3void student_edit(void) //修改学生信息{ int n;page_title("编辑学生基本信息");if((n=search_id())!=-1){printf("请重新输入新信息:学号:");scanf("%d",&students[n].id);printf(":");scanf("%s",&students[n].name);printf("年龄:");scanf("%d",&students[n].age);}return_confirm();}//2void score_input(void) //输入学生成绩{ int s,n,t;page_title("录入成绩");printf("请用数字键选择科目1-语文 2-数学 3-英语\n");scanf("%d",&s);for(n=0;n<53;n++){if(students[n].id!=0){printf("学号:%d :%s 成绩:",students[n].id,students[n].name);scanf("%d",&t);switch(s){case 1 : students[n].chinese=t;break;case 2 : students[n].math=t;break;case 3 : students[n].english=t;break;}}}return_confirm();}//4void score_edit(void) //修改学生成绩{ int n;page_title("修改成绩");if((n=search_id())!=-1){printf("语文:%d 数学:%d 英语:%d\n",students[n].chinese,students[n].math,students[n].english);printf("请重新输入成绩:语文:");scanf("%d",&students[n].chinese);printf("数学:");scanf("%s",&students[n].math);printf("英语:");scanf("%d",&students[n].english);}return_confirm();}//5void sort_it(char nn) //学生信息排序{ int n,m,p,x,t[53];for(n=0;n<53;n++){switch(nn){case '1' : t[n]=students[n].id;break;case '2' : t[n]=students[n].chinese;break;case '3' : t[n]=students[n].math;break;case '4' : t[n]=students[n].english;break;case '5' : t[n]=students[n].chinese+students[n].math+students[n].english;break;}}for(n=0;n<53;n++){x=0;p=-1;for(m=0;m<53;m++){if(t[m]>x){x=t[m];p=m;}}t[p]=-1;INDEX[n]=p;}}//void browser(void) //浏览{ int n,x;char k;sort_it('1');while(1){page_title("浏览");printf("按数字键选择排序方式或按 0 返回\n");printf("学号-1\t\t年龄\t语文-2\t数学-3\t英语-4\t总分-5\n");for(n=0;n<53;n++){if(INDEX[n]!=-1){x=INDEX[n];printf("%d\t%s\t",students[x].id,students[x].name);printf("%d\t%d\t",students[x].age,students[x].chinese);printf("%d\t%d\t",students[x].math,students[x].english);printf("%d\n",students[x].chinese+students[x].math+students[x].english);}}k=getch();if(k<'6'&&k>'0') sort_it(k);else if(k=='0') break;else continue;}}//6void main(void) //主函数{ menu: page_title("操作选单\n");printf("请用数字键选择操作\n");printf("1 录入学生基本信息\n2 修改学生基本信息\n");printf("3 注销学生基本信息\n4 录入成绩\n5 修改成绩\n");printf("6 浏览\n0 退出\n");switch(getch()){case '1' : student_new();break;case '2' : student_edit();break;case '3' : student_del();break;case '4' : score_input();break;case '5' : score_edit();break;case '6' : browser();break;case '0' : exit(0);}system("cls");goto menu;}六测试数据和结果1、学生信息的基本录入1)学号:01、02、032):某某、某某、王某某3)年龄:21、20、192、修改学生的基本信息1)学号:012)修改为:02 某某 193、注销学生的基本信息1)学号:014、录入成绩1)学号:02 语文成绩1002)学号:03 语文成绩 995、修改学生成绩6、浏览程序执行页面1、学生信息的基本录入2、学生信息的修改错误为3、注销学生基本信息4、录入成绩5、修改成绩、浏览七、参考文献1、严蔚敏.《数据结构( C语言版)》.清华大学,2、谭浩强.《C语言程序设计》.清华大学,小结课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在是生活中可以说得是无处不在。