C语言课程设计报告 .doc
西安邮电学院软件设计 报 告 书院系名称:电子工程学院学生姓名:周宇专业名称:微电子班 级:1101学号:时间:2012年4月10日至2012年4月17日 实验题目:学生成绩管理系统一、 实验目的综合应用所学的计算机基础知识和所掌握的程序设计语言,自行设计并实现一个较为完整的小型管理信息系统的设计与开发。通过系统分析、系统设计、编程实现,写实验报告等环节,初步掌握软件系统的设计方法和步骤,锻炼大家灵活运用程序语言进行软件开发的初步能力,提高分析问题和解决问题的能力,提高程序设计水平。二、 功能要求1、数据录入、存储(录入系统所需的数据;将录入的数据存储在文件中)2、数据查询(按要求对数据进行查询)3、数据修改(对数据进行更新操作)4、数据删除(对数据进行删除操作)5、数据统计(对指定数据进行统计并输出)6、数据排序(对指定数据排序并输出)7、数据报表(对指定数据产生报表输出)8、界面(功能目录)三、系统分析与设计1、系统功能的描述:本系统先通过输入密码进入其主菜单界面,(主菜单界面共有10项服务选项,分别为(1)录入信息,(2)显示信息,(3)排序,(4)查询信息(5)插入信息,(6)删除信息(7)修改信息,(8)从文件读入学生信息,(9)所有学生信息写入文件,(0)退出系统。)2、程序模块结构图: 开始请输入密码主菜单 排序查询信息插入信息删除信息修改信息从文件读入信息学生信息写入文件显示信息录入信息 退出3、各模块功能说明:(1)录入信息,可以输入学生的班级,学号,姓名,C语言成绩,高数成绩,英语,物理成绩相关信息。调用input()函数。(2)显示信息,可以显示所输入学生的全部信息。包括学生的班级,学号,姓名,C语言成绩,高数成绩,英语,物理成绩相关信息。调用display()函数。(3)排序,按照学生的平均成绩进行排序。调用sort()函数。(4)查询信息,按照系统提示输入要查询的学生信息,根据学生的学号查询学生的成绩。调用search()函数。(5)插入信息,依次写入学生的信息,班级,学号,姓名,C语言成绩,高数成绩,英语,物理成绩相关信息。调用insert()函数。(6)删除信息,同样也是根据学生的学号删除相应学生的信息。调用Delete()函数。(7)修改信息,同样也是根据学生的学号修改相应学生的信息。调用change()函数。(8)从文件读入学生信息,根据自己新建的文件名(在(9)中所建的文件),读入学生信息。使用read()函数。(9)所有学生信息写入文件, 新建文件,便于数据的读入于使用,进而保存。使用save()函数。四、详细设计及运行结果1、数据类型:1,结果体数组。(1)班级,姓名使用字符型。(2)学号使用长整型,成绩使用浮点型。2、数据文件信息:建立一个新的文件,其包含输入学生的全部信息,如学号,姓名成绩等。 3、主要功能模块的流程图:(1)使用if语句:根据学生学号进行判断选择。开始是否有此学号:输入学号:可选择你所需要进行的服务:插入,删除,修改等。YN结束输出学生信息: (2)for()语句。用于密码输入和成绩输入。 输入i;i=0i<1循环体语句计算表达式3;YN(3)冒泡排序。(以i,j,stud和n为例)输入数据:i=1i<nj=i+1j<=nstudi<studj交换studistudjj=j+1输出结果结束i=i+1YNYNNY4、运行结果 (1)密码界面:密码为6位(),输入错误将会一直提醒“密码错误!“如如果密码正确,则进入主菜单。(2)主菜单界面: (3)选择输入学生信息,进行输入。如:可选择继续(y或Y),退出(n或N)。(2)显示学生信息。如:(3)使用冒泡排序,根据学生的平均分降序排列。如:当然也可查询学生信息,注意按照学生的学号进行查询,第(4)项。如:对于插入,删除,和修改学生信息,同样也是按照学号进行的。如:但是对于插入的学生信息,系统提醒你是否进行排序,选择y或Y,则:对于删除和修改,和插入类似,在这就不做演示了。下面我们来介绍读文件和保存文件。如:我们可以先新建一个文件,如:zz.便于文件的管理和存储,如:进行(8)操作:退出系统为:五、调试情况,设计技巧及体会: 首先此程序通过加密,对学生信息进行保护。根据菜单显示,进行运行。对于菜单的显示,使用了简单的输出。可由自己发挥,输出自己想要得到菜单界面,比较简单,便于操作。而对于显示,排序,查询,插入,删除,修改等函数时,刚开始由于不注意函数定义的类型,是否有返回值,导致错误。 C语言的实质就是以一定的语法规范为准,通过对数据量的复杂结构运算,完成一定功能的程序,是一门计算机基础语言,我们通过这一学期的学习,对于其特点和算法有了一定程度的了解。这两周的课程设计正是让我们巩固以前的知识并在此基础上能够有所突破。在大家的共同努力下,忙碌了两个星期,我们顺利完成了对此程序的编译及试运行。在设计程序的过程中,我们了解到要设计一个完整的程序,其中最难的可能就属设计整个程序的框架,其中可能会需要经过很多次的修改与调试,所以必须要有耐心,直至最后设计出自己想要的程序。另外平时学习c语言的基础也很关键,因为如果平时学得就不怎么样,那么你面对这么一个比较有难度的程序,可能会望而却步,看懂他人的程序都是个难点,更别说让自己去设计。为了解决此类问题,最好就是多向同学,老师请教,查找资料。设计一个程序的过程就是解决一个实际问题的过程,从解决实际问题的角度,我们可以这样来看:首先要了解这个问题的基本要求,即输入、输出、完成从输入到输出的要求是什么;在次我们必须捋清思路,逐一的解决问题的各个方面,即从输入开始入手,着重考虑如何从输入导出输出,在这个过程中,可确定所需的变量、数组、函数,然后确定处理过程算法。感谢这次的课程设计,它使我更加深刻地体会到c语言程序编写过程的严谨与细致,还有就是无论做任何事都要有耐心。当然团队合作也是非常重要的一个环节,这会使你在学习过程中倍感轻松,所以在此次课程设计过程中,通过我们小组全体成员共同努力,终于完成了这个学生管理系统的设计。 总的来说,这次程序设计让我获益匪浅,对C语言也有了进一步的认识:C语言功能高、表达能力强、使用灵活方便、目标程序效率高等等。C语言是在国内外广泛使用的一种计算机语言,相信除了以上优点,还有许多我们还未发现,希望能在以后的学习中有更深入的认识。六、源程序清单#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>typedef struct long number; long banji; char name10; float c; float English; float physics; float math; float summary; float average;Student;Student stud101;int i=0;char Filename30="NONAME"int mima() int i;char ch1,ch2,ch3,ch4,ch5,ch6;for(i=0;i<1;) printf("ttt请输入密码:"); ch1=getch();printf("*"); ch2=getch();printf("*"); ch3=getch();printf("*"); ch4=getch();printf("*"); ch5=getch();printf("*"); ch6=getch();printf("*"); if(ch1=49&&ch2=49&&ch3=49&&ch4=49&&ch5=49&&ch6=49) printf("tt密码正确!欢迎使用!n"); i=1; else printf("tt密码错误!n"); system ("pause"); system("cls");return i;void show() printf("tt*n"); printf(" ttt欢迎进入西安邮电学院大一学生期末成绩学生信息管理系统n"); printf("tt*n"); printf("tt(1)输入学生信息n"); printf("tt(2)显示所有学生的信息n"); printf("tt(3)按平均分降序排列n"); printf("tt(4)按照学生学号查询学生的信息n"); printf("tt(5)插入学生信息n"); printf("tt(6)删除学生信息n"); printf("tt(7)修改学生信息n"); printf("tt(8)从文件中读入学生信息n"); printf("tt(9)将所有学生信息写入文件n"); printf("tt(0)退出此系统n"); printf("tt"); printf("请选择你所要进行的服务(0)(9)。");printf("请输入一个数:");int menu()int b; show(); scanf("%d",&b); while(b<0|b>9) printf("对不起!输入错误!请重输!n"); system("cls"); show();scanf("%d",&b); return (b);int input(Student stud)/*输入学生信息代码*/ char flag='Y'while(flag='Y'|flag='y')printf("t请输入该学生的班级:");scanf("%d",&studi.banji);printf("t请输入该学生的学号:"); scanf("%d",&studi.number);printf("t请输入该学生的姓名:");scanf("%s",&studi.name);printf("t请输入该学生的c语言成绩:"); scanf("%f",&studi.c); printf("t请输入该学生的英语成绩:"); scanf("%f",&studi.English); printf("t请输入该学生的大物成绩:"); scanf("%f",&studi.physics); printf("t请输入该学生的高数成绩:"); scanf("%f",&studi.math); getchar(); studi.summary=studi.c+studi.English+studi.physics+studi.math;studi.average=studi.summary/4;printf("t该学生的总分成绩为:%6.2fnt该学生的平均成绩为:%6.2fn",studi.summary,studi.average); i+; printf("t如果继续输入学生信息请按:Y或y,退出请按N或nn"); scanf("%c",&flag);printf("t按任意键回主菜单n");getchar();system("cls");return (i);void Display(Student stud,int t)/*显示学生信息代码*/ int k;if(t=0)printf("t暂无学生信息记录!n");else printf("班级 学号 姓名 高数 c语言 物理 英语 总分 平均分 n");for(k=0;k<t;k+) printf("%-8ld",studk.banji); printf("%-9ld",studk.number); printf("%-s t",studk.name); printf(" %-6.2f ",studk.math); printf("%-6.2f ",studk.c); printf("%-6.2f ",studk.physics); printf("%-6.2f ",studk.English);printf("%-6.2f ",studk.summary); printf("%-6.2f n",studk.average); system ("pause"); system ("cls");void sort(Student stud,int i)/*成绩排序代码*/ int m,n,j; Student t; for(m=0;m<i-1;m+) for(n=m+1;n<i;n+) if(studm.average < studn.average ) t = studm ; studm = studn ; studn = t; printf("t排序后的顺序为n"); printf("班级 学号 姓名 高数 c语言 物理 英语 总分 平均分 n");for(j=0;j<i;j+) printf("%-8ld",studj.banji); printf("%-9ld",studj.number); printf("%-s t",studj.name); printf(" %-6.2f ",studj.math); printf("%-6.2f ",studj.c); printf("%-6.2f ",studj.physics); printf("%-6.2f ",studj.English);printf("%-6.2f ",studj.summary); printf("%-6.2f n",studj.average); system ("pause"); system ("cls"); void search(Student stud,int i)/*查询学生成绩代码*/ int p,j; char flag='Y' while (flag='Y'|flag='y') printf("请输入要查询学生的学号:");scanf("%d",&p);getchar(); for(j=0;j<i;j+) if(p=studj.number) printf("该学生的信息为:n"); printf("班级 学号 姓名 高数 c语言 物理 英语 总分 平均分 n");printf("%-8ld",studj.banji); printf("%-9ld",studj.number); printf("%-s t",studj.name); printf(" %-6.2f ",studj.math); printf("%-6.2f ",studj.c); printf("%-6.2f ",studj.physics); printf("%-6.2f ",studj.English);printf("%-6.2f ",studj.summary); printf("%-6.2f n",studj.average); system("pause"); system("cls"); return; if(j=i) printf("该学号不存在!n"); system("cls"); printf("t如果继续输入学生信息请按:Y或y,退出请按N或nn"); scanf("%c",&flag); system("cls");int insert(Student stud,int i)/*插入信息代码*/ char flag='Y' while (flag='Y'|flag='y') printf("请输入你要插入学生的班级:"); scanf("%ld",&studi.banji); printf("t请输入你要插入学生的学号:"); scanf("%ld",&studi.number);printf("t请输入你要插入学生的姓名:");scanf("%s",&studi.name);printf("t请输入你要插入学生的c语言成绩:"); scanf("%f",&studi.c); printf("t请输入你要插入学生的英语成绩:"); scanf("%f",&studi.English); printf("t请输入你要插入学生的大物成绩:"); scanf("%f",&studi.physics); printf("t请输入你要插入学生的高数成绩:"); scanf("%f",&studi.math); getchar(); studi.summary=studi.c+studi.English+studi.physics+studi.math;studi.average=studi.summary/4;printf("t该学生的总分成绩为:%6.2fn该学生的平均成绩为:%6.2fn",studi.summary,studi.average);i+; printf("t如果继续输入学生信息请按:Y或y,退出请按N或nn"); scanf("%c",&flag); getchar(); printf("是否需要排序,是请按:Y或y,不需要请按N或nn");flag=getchar();if (flag='Y'|flag='y')sort(stud,i); system("cls");return (i);int Delete(Student std,int i)/*删除信息代码*/long w;int t,p;char d='Y'while(d='Y'|d='y')printf("请输入需要删除学生的学号:n"); scanf("%ld",&w); getchar(); for(t=0;t<i;t+) if(w=studt.number) for(p=t;p<i;p+) studp=studp+1; i=i-1; printf("删除成功!n"); system("pause"); system("cls"); return (i); printf("不需要删除学生的学号n"); printf("是否需要删除,是请按:Y或y,不需要请按N或nn"); d=getchar(); system("cls");return (i);void change(Student stud,int i)/修改信息代码/ long q=0; int k; char d='Y' while (d='Y'|d='y') printf("tt学生信息修改:n"); printf("请输入修改学生的学号:n"); scanf("%ld",&q); for(k=0;k<i;k+) if(q=studk.number) break; if(k=i) printf("无此学生信息n"); system("pause"); system("cls"); return; printf("请输入学生的新信息n"); printf("请输入你要修改学生的班级:"); scanf("%ld",&studk.banji); printf("t请输入你要修改学生的学号:"); scanf("%ld",&studk.number);printf("t请输入你要修改学生的姓名:");scanf("%s",&studk.name);printf("t请输入你要修改学生的c语言成绩:"); scanf("%f",&studk.c); printf("t请输入你要修改学生的英语成绩:"); scanf("%f",&studk.English); printf("t请输入你要修改学生的大物成绩:"); scanf("%f",&studk.physics); printf("t请输入你要修改学生的高数成绩:"); scanf("%f",&studk.math); getchar();studk.summary=studk.c+studk.English+studk.physics+studk.math;studk.average=studk.summary/4;printf("修改成功n"); printf("是否需要修改,是请按:Y或y,不需要请按N或nn"); d=getchar(); system("pause");system("cls");int read(Student stud,int i)/读入信息代码/int k=i; FILE *fp; printf("请输入你所要读取的学生成绩信息文件名:n"); scanf("%s",&Filename); if(fp=fopen( Filename,"rt") = NULL) printf("无法打开文件!请创建!n"); system("pause");system("cls"); return 0; printf("从文件中读入数据:n"); printf("班级 学号 姓名 高数 c语言 物理 英语 总分 平均分 n"); while(!feof(fp)/ fread(void *)&studk,sizeof(Student),1,fp); printf("%-8ld",studk.banji); printf("%-9ld",studk.number); printf("%-s t",studk.name); printf(" %-6.2f ",studk.math); printf("%-6.2f ",studk.c); printf("%-6.2f ",studk.physics); printf("%-6.2f ",studk.English);printf("%-6.2f ",studk.summary); printf("%-6.2f n",studk.average);k+; fclose(fp); printf("读入成功!n"); system("pause"); system("cls"); return (k); void save(Student stu,int i) int k=0; FILE *fp; printf("请输入你所要存储学生成绩信息文件名:n"); scanf("%s",&Filename); if(fp=fopen(Filename,"wt")=NULL) printf("无法打开文件!n"); /*return ;*/ exit(1); while (k<i) fwrite(void *)&studk,sizeof(Student),1,fp); k+; fclose(fp); printf("保存成功!n"); system("pause"); system("cls"); int main() int t=0;mima();while(1)switch (menu()case 1:printf("tt(1)输入学生信息n");t=input(stud);break;case 2:printf("tt(2)显示所有学生的信息n");Display(stud,t);break; case 3:printf("tt(3)按平均分降序排列n");sort(stud,t);break;case 4:printf("tt(4)按照学生学号查询学生的信息