C语言课程设计报告学生信息管理系统.docx
优质文本前言 C语言是一门通用的计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。 近年来,C语言在国内得到了迅速的推广和应用。作为一门通用的语言,在过去很流行吗,将来依然会如此。几乎每一个理工科或者其他专业的学生毫不例外的要学习它,同时,C语言作为“全国计算机二级等级考试中的一门可选语言,也是用来衡量计算机程序设计水平的一个重要标准。从C语言产生到现在,它已成为最重要和最流行的编程语言之一。在各种流行编程语言中,都能看到C语言的影子,如JAVA的语法与C语言根本相同。学习、掌握C语言是每一个计算机技术人员的根本功之一。C语言具有高级语言的强大功能,却又有很多直接操作计算机硬件的功能这些都是汇编语言的功能,因此,C语言通常又被称为中级语言。学习和掌握C语言,即可以增进对于计算机底层工作机制的了解,又为进一步学习其他高级语言打下了坚实的根底。C语言程序设计是一门实践性很强的课程,所以本学科的实验实训非常重要。所以我们进行了本次课程设计实践。在这个过程中我们都学到了很多,此报告便是这次课程设计的经过、流程,介绍了局部自己编写的程序。目录1.问题概述02 2.系统需求分析023.系统概要设计024.系统的详细设计065系统的测试及调试156.用户手册217.总结218.参考文献229.附录231.问题概述 设计一个学生综合测评的信息及成绩的管理系统,以解决传统纸质信息统计的不易修改,储存及放置等诸多不便及弊端。来简化学校的办公,节约时间及人力。1. 系统需求分析在学生信息的日常管理中,经常需要对学生相关信息进行处理,采用传统的手工记录,查询方式,显然有很多不便,如屡次的增、删、改可能使信息变得混乱,为今后的信息提取带来很多麻烦。为了解决这一问题,可采用现代化的手段计算机进行系统的管理。这样可大大提高管理的质量和效率,并且使学生的信息管理也从手工操作中解脱出来,减少纸制材料的数量,对日常信息的查询、方便、快捷。因此,基于这些方面的考虑,决定开发本系统。2. 系统概要设计 设计一个学生综合测评的信息及成绩的管理系统,以解决传统纸质信息统计的不易修改,储存及放置等诸多不便及弊端。来简化学校的办公,节约时间及人力。3.1 系统的主要功能系统的主要功能是实现学生根本的信息及成绩的录入和管理。主要包括:A、学生信息处理(1) 学生信息的录入。(2) 学生信息的修改。(3) 学生信息的浏览B、学生数据处理:(1) 学生考试数据输入并计算平均分及名次(2) 学生测评数据输入并计算综合测评总分及名次(3) 学生数据的修。(4) 学生数据的查询C、学生综合信息显示3.2 系统的总体结构 (1) 程序主界面的设计主界面主界面3学生综合信息显示2学生数据处理系统2学生数据处理系统 5 退出系统4用户指南1学生信息处理系统 图3.1.1 系统主界面结构图2学生信息处理子界面设计学生信息处理3返回主菜单2修改学生信息1录入学生信息 图3.1.2 系统子界面结构图1学生数据处理学生数据处理3学生数据修改2测评成绩录入及处理5返回主菜单4学生数据查询1考试成绩录入及处理图3.1 系统子界面结构图21、学生信息处理(1) 录入学生信息、学号、姓名、性别、家庭住址、联系 ,按学号以小到大的顺序存入文件中。学生信息可先输入到数组中,排序后可写到文件中。(2) 修改同学信息。2、学生数据处理:(1) 考试成绩录入及处理: 考试成绩语文+数学+外语/3 计算考试成绩,并计算考试名次,提示:先把学生信息读入数组,然后按提示输入每科成绩,计算考试成绩,求知名次,最后把学生记录写入一个文件中。(2) 测评成绩录入及处理:综合测评总分考试成绩*0.6+同学互评分*0.1+品德成绩*0.1+任课老师评分*0.2。(3) 学生数据修改:输入学号,读出并显示该同学信息,输入新数据,将改后信息写入文件(4) 学生数据查询:输入学号,即读出所有数据信息,并显示出来。3、查询学生综合信息 输入学号即读出综合信息,并显示出来3.3 系统软硬件环境 本程序所适用的计算机系统软硬件环境要求为: 硬件环境: Pentium III 500以上内存:256M 软件环境: Windows 73.4 数据结构设计学生信息数据结构类型如下:struct student int num; /*学号*/char name20; /*学生姓名*/char sex10; /*性别 男/女*/char home200; /*家庭住址*/ int s1; /*语文成绩*/int s2; /*数学成绩*/int s3; /*英语成绩*/ int ave; /*三科平均成绩*/int Tel; /*联系方式*/ int m1; /*考试名次*/int a1; /*同学互评分*/int a2; /*品德成绩*/int a3; /*任课教师评分*/int z; /*综合测评总分*/int m2; /*综合测评名次*/stuN;4 系统的详细设计根据系统总体结构对问题进行的模块划分,对总的问题可划分为:学生信息处理、学生数据处理、学生综合信息查询三个大模块,另还设置了用户帮助函数及退出系统。首先在主函数中调用了void one()函数来显示主菜单,主菜单中调用子菜单也就是学生信息处理、学生数据处理的菜单。学生信息处理用void info()来显示子菜单1,子菜单1中调用了void info_1();void info_2()。两个函数来实现学生信息的录入和修改。学生数据处理用void data()来显示子菜2,子菜单2中调用了void data_2; void data_1; void data_3; void data_4等函数来实现数据的录入修改及查询。还使用了void sort_num(struct student a, int n);void sort_ave(struct student a, int n); void sort_z(struct student a, int n); 三个排序函数来处理学生的数据在最后的学生综合信息查询中使用的是void look()来实现其功能在用户指南中使用了void help()函数来实现其功能以上就是此系统中使用的函数来实现其功能。4.1主菜单void one()1.系统流程该函数主要用来显示主菜单的内容以及进入子菜单实现功能,该函数实现过程中首先定义了一个变量opt1,这是用户选择进入那个模块的选项。首先判断opt1的值,如果为1那么调用void info()进入信息管理模块,如果为2那么调用void data()进入数据管理模块,如果为3那么调用void look()进入学生综合信息查询功,如果为4那么调用void help()进入用户指南函数查看,如果为5那么退出系统。 如果用户没有输入12345中的选项,那么会提示输入错误请重新输入。2.代码实现void one() /*主菜单函数*/int opt1; /*主菜单项选择项*/printf(" 欢送使用学生综合测评系统 nn");printf(" 1: 学生信息处理 2:学生数据处理nn 3: 学生综合信息");printf(" 4:用户使用指南nn");printf(" 5:退出nn");printf(" 请输入1 2 3 4 5中的任意一个选项进行操作:");loop:scanf("%d", &opt1);switch (opt1)case 1:info();break;case 2:data();break;case 3:look();break;case 4:help();break;case 5:break;default:printf(" 输入错误,请重新输入 1 2 3 4 5中的一项");scanf("%d", &opt1);goto loop;4.2子菜单1 void info()1.系统流程该函数主要用来显示子菜单1的内容以及进入功能实现函数,该函数实现过程中首先定义了一个变量opt2,这是用户选择进入那个功能的选项。首先判断opt2的值,如果为1那么调用void info_1()进入学生信息录入功能,如果为2那么调用void info_2()进入学生信息修改功能,如果为3那么调用void one()返回到主菜单。 如果用户没有输入123中的选项,那么会提示输入错误请重新输入。2.代码实现void info() /*信息处理函数*/int opt2; /*子菜单项选择项*/printf("nn 欢送进入信息处理 nn");printf(" 1.学生信息录入nn 2.学生信息的修改nn");printf(" 3.返回nn");printf(" 请输入 1 2 3 中的任意一个选项进行操作");loop:scanf("%d", &opt2);switch (opt2) case 1:info_1();break;case 2:info_2();break;case 3:one(); break;default: printf("输入错误,请重新输入 1 2 3 中的一项");goto loop; 4.3学生信息录入void info_1()1. 系统流程 该函数运行后,首先翻开文件,然后判断文件是否为空。如果为空设置一个变量count来记录录入学生的数目。如果不为空,那么从文件中读取count的值。然后开始录入学生信息,设置变量输入s,用switch语句来决定是否录入或退出。输入1录入0退出2返回上一层。在1中用goto语句实现循环录入到数组中。在2中调用void one().最后将学生信息的数组和count写入文件,然后关闭文件。2.代码实现void info_1() /*信息录入函数*/FILE *fp;int s, i,count;count=0;i = 1;if(fp = fopen("stu","rb+") = NULL) if(fp = fopen("stu","wb") = NULL) printf("Con't open filen");exit(1); stu0.num=0;else fclose(fp); if(fp = fopen("stu","ab+") = NULL) printf("Con't open filen");exit(1); fread(stu,sizeof(struct student),N,fp); fscanf(fp,"%d",&stu0.num);loop:printf("nn您将开始录入学生信息n输入1将继续n输入2返回上一层n输入0将退出n");looo:scanf("%d", &s);switch (s)case 0:break;case 1:count+; printf("nn您将输入第%d学生的信息:",count);printf("n学号:");scanf("%d",&stui.num); printf("姓名:");scanf("%s",stui.name);printf("性别:");scanf("%s",stui.sex);printf("家庭住址:");scanf("%s",stui.home);printf("联系 :");scanf("%d",&stui.Tel);i+;goto loop;break;case 2:info();break;default:printf("n 输入错误,请重新输入0 1 2中的一项");goto looo;sort_num(stu, i); stui+1.num=0;stu0.num += count;fseek(fp, 0, SEEK_SET);fwrite(stu, sizeof(struct student), N, fp);fseek(fp, 0, SEEK_SET);fread(stu, sizeof(struct student), N, fp);for(i=1;i<=stu0.num;i+)printf("%dn",stui.num);system("pause");fclose(fp);4.4学生信息修改void info_2()1. 系统流程 该函数运行后,首先翻开文件,读取文件内容到数组中。设置变量num 用户输入一个学号。然后用一个for循环将num与数组中的学号的值进行比拟,如果相同,跳出循环。找到后将其输出。询问是否修改。修改后将其写入文件中。关闭文件。2.代码实现void info_2() /*信息修改函数*/FILE *fp;int j;if (fp = fopen("stu", "rb") = NULL)printf("Can not open filen");exit(1); /*翻开文件*/ fread(stu, sizeof(struct student),1 , fp); for(j = 1;j <=stu0.num;j+)fread(&stuj, sizeof(struct student),1 ,fp);fclose(fp);int i, num, xu, a;llll:printf("nn请输入需要修改信息的学生的学号:n"); scanf("%d", &num);for (i = 1; i<=stu0.num; i+)if (stui.num = num)break; /*查找需要修改的学生的信息*if(i >= stu0.num) printf("查无此人");return ;printf("请问您是否是需要修改此生的信息:");printf("学号%d 姓名%s 性别%s 家庭住址%s 联系 %d", stui.num, stui.name, stui.sex, stui.home, stui.Tel);printf("nn如果是请输入1 不是请输入2:n");loop: scanf("%d", &xu);switch (xu)case 1:printf("请输入新的信息n");printf("学号:");scanf("%d", &stui.num);printf("姓名:");scanf("%s", stui.name);printf("性别:");scanf("%s", stui.sex);printf("家庭住址:");scanf("%s", stui.home);printf("联系 :");scanf("%d", &stui.Tel);printf("完成修改!");break;case 2:break;default:printf("n 输入错误,请重新输入0 1中的一项");goto loop; /*修改学生信息*/if (fp = fopen("stu", "wb") = NULL)printf("Can not open filen");exit(1); /*翻开文件*/fwrite(stu, sizeof(struct student), stu0.num, fp); /* 写入文件中*/fclose(fp);printf("n 是否继续修改学生信息 n是请输入1 n退出请输入2n返回上一层请输入0");lllk: scanf("%d", &a);switch (a)case 0:info();break;case 1:goto llll;break;case 2:break;default:printf("n 输入错误,请重新输入0 1中的一项");goto lllk; /*关闭文件*/学生数据模块的函数与学生信息模块的函数相似,录入,修改,查询功能。4.5学生综合信息查询 void look()1. 系统流程2. 该函数运行后,首先翻开文件,读取文件内容到数组中。设置变量num 用户输入一个学号。然后用一个for循环将num与数组中的学号的值进行比拟,如果相同,跳出循环。找到后将其输出。然后询问是否继续修改,如果是goto语句回到输入学号那里,如果不是,关闭文件退出。2.代码实现void look() /*综合信息显示函数*/int m;FILE *fp;if (fp = fopen("stu", "rb") = NULL)printf("Can not open filen");exit(1); fread(stu, sizeof(struct student),1 , fp); for(m = 1;m <=stu0.num;m+)fread(&stum, sizeof(struct student),1 ,fp); fclose(fp); /*读取文件*/int i, num, a;llll:printf("nn请输入需要查询综合信息的学生的学号:n");scanf("%d", &num);for (i = 1; i<=stu0.num; i+)if (stui.num = num)break; /*查找需要修改的学生的信息*/if(i >= stu0.num) printf("查无此人");return ;printf(" 学生数据显示:nn");printf(" 学号%d 姓名%s 性别%s 家庭住址%s 联系 %d n", stui.num, stui.name, stui.sex, stui.home, stui.Tel);printf(" 语文%d 数学%d 英语%d 平均分%d 考试名次%d n", stui.s1, stui.s2, stui.s3, stui.ave, stui.m1);printf(" 同学互评分%d 品德成绩%d 任课教师评分%d 综合测评总分%d 综合排名%d", stui.a1, stui.a2, stui.a3, stui.z, stui.m2);printf("n 是否继续查询学生数据 是请输入1 否请输入2n");lllk: scanf("%d", &a);switch (a)case 1:goto llll;break;case 2:break;default:printf("n 输入错误,请重新输入0 1中的一项");goto lllk;fclose(fp); /*关闭文件*/4.6用户指南 void help()1. 系统流程该函数主要用来提示用户此系统的信息,进入后浏览信息,最后定义一个变量i,请用户输入1返回到主菜单进行操作。如果用户输入的不是1那么提示请输入1。2.代码实现void help()int i;printf("本系统可以存储学生的根本信息和各科成绩,并能计算考试成绩,综合测评成绩和排名。nn ");printf(" 根本信息包括:学号、姓名、性别、家庭住址、联系 ;nn 各科成绩包括:语文、数学、英语成绩;nn");printf(" 其它包括:考试名次、同学互评分、品德成绩、任课教师评分等。nn");printf(" 说明:考试成绩排名是按照考试成绩平均分计算的( 平均分=(语+数+外)/3)nn");printf(" 综合测评总分=(考试成绩)*0.6+同学互评分*0.1+(品德成绩)*0.1n +(任课教师评分)*0.2)nn");printf(" 此系统最多可管理5000人信息。");printf(" 其它请按照提示操作即可。n");printf("返回上一层请输入1");loop:scanf("%d",&i);if(i=1)one();elseprintf("输入错误请重新输入:"); goto loop;5 系统测试及调试系统的测试及调试是为了发现程序中错误,而执行程序的过程。5.1运行过程:1运行该程序,进入一个主菜单函数,出现了选择的菜单:可输入选项进入子菜单两个子菜单分别进入:2在进入第一个子菜单后可进行学生的信息处理:在输入1后可进行学生信息的录入:每录完一个信息后会询问是否继续录入或者返回上一层或者退出返回上一层,便回到了主菜单可继续进行操作:在信息处理内选择2来修改学生的信息:3在进入第二个子菜单后可进行学生的数据处理:数据录入:数据查询:3在主菜单项选择择3进入后可查询综合信息:4在主菜单项选择择4进入后可查看用户指南:5)输入5便退出系统:5.2系统调试过程中遇到的问题 :1录入学生信息后能够写进文件,但是只能查询时只能查询到第一个人的信息错误原因:录入信息后储存后。无法知道信息的条数。读取的时候只读取了第一条。解决方案:在信息录入的时候设置一个变量来记录学生信息录入的条数。并且将条数写进文件中,读取的时候将它先读出来,再读取学生信息。 2录入学生信息后再次读取,学生学号变为乱码。错误原因:录入完信息后储存了一个记录学生信息条数的变量。这个数储存的时候储存在了文件的第一个位置。而学生信息所在的结构体那么在后面,所以读取的时候出错。解决方法:将结构体的第一个用来储存记录学生信息变化的数据。信息录入那么从第二个开始录入。3第二次录入学生信息与第一次录入学生信息的时候变量的设置问题。错误原因:在第一次录入时读不到设置的变量而第二次需要读取设置的变量。解决方案:在翻开文件时增加一个判断,文件是否为空,假设是空那么便是第一次写入学生信息,那么设置变量为0。假设不为空,那么读取变量,并继续进行累加。其他错误与此类似,便不一一举例。6 用户手册 1本系统执行文件为:Cpp1.exe。2进入系统界面后,在主菜单的中,选择相应的操作前的数字,出现提示界面。根据提示输入相关信息或得到预期结果。3在输入信息时:学号为字符型。姓名 15个汉字或110个英文字母。性别 男或女 联系方式 为11个数字家庭住址 为120个汉字。考试成绩及测评成绩都为0100的数字7 总结 在五天的苦力后,我的学生信息综合管理系统工程课程设计终于完工了,虽然系统还不够完善,但是已经具备了一个信息管理系统的根本功能。一周的课程设计,虽然很忙碌,但我感觉收获很多,不仅仅在知识和技术上,而且我也懂得了很多人生哲理,懂得怎么样去制定方案,怎么样去实现这个方案。曾经有过放弃本系统的念头,曾经有过敷衍了事的想法。但是每一次技术突破的喜悦,都让我坚决了胜利的信念。通过这次程序设计,让我更好的了解C语言,对系统的编译有了更深刻的认识。在测试和调试方面,曾经天真的一位编程才是最浪费时间的,在这次实践中,让我更加清楚的认识到,软件测试和调试在整个工作中所占的比例。也让我更加相信调试是软件开发中最艰巨的脑力劳动。本次课程设计中出现了许多隐藏的错误,令我收获不少。但我相信也一定会有很多未发现的问题,特别是在以后的系统扩展中,种些问题会更明显,但我相信问题的出现就是需要我们去解决。通过这次课程设计我通彻的体会到了一个问题:在做实验前一定要将课本上的知识吃透,因为这是实验的根底,否那么,这将使你做实验的难度加大,浪费做实验的珍贵时间。比方说文件的使用,因为没有将文件的使用学习贯彻,所以导致在调试的时候出现各种错误。在做实验的时候才去摸索,这将使我极大地浪费时间。在这次课程设计中我学到了很多很多。受益匪浅。总体来说,这次C语言程序设计实验还是比拟成功的,虽然最终程序还存在一些缺乏,但能取得这样的成绩我还是比拟快乐的。最后,要感谢学校为我们提供这次实验时机,也要感谢老师的教导,帮助与支持8参考文献1张磊编著?C语言程序设计教程第2版? 中国铁道出版社2薛小龙编著?开发日记:深入体验C语言工程开发? 清华大学出版社3刘宇君 张月琴 叶瑶 王庆生 编著?C+程序设计案例分析? 清华大学出版社9附录 /*学生综合测评系统*/#include<stdio.h>#include<string.h>#include<stdlib.h>#define N 5000struct studentint num; /*学号*/char name20; /*学生姓名*/char sex10; /*性别 男/女*/char home200; /*家庭住址*/int s1; /*语文成绩*/int s2; /*数学成绩*/int s3; /*英语成绩*/int ave; /*三科平均成绩*/int Tel; /*联系方式*/int m1; /*考试名次*/int a1; /*同学互评分*/int a2; /*品德成绩*/int a3; /*任课教师评分*/double z; /*综合测评总分*/int m2; /*综合测评名次*/stuN;void one(); /*主菜单函数声明*/void info(); /*信息处理函数声明*/void data(); /*数据处理函数声明*/void look(); /*综合信息显示函数声明*/void help(); /*用户指南函数声明*/void info_1(); /*信息录入函数声明*/void sort_num(struct student a, int n); /*学号排序函数声明*/void sort_ave(struct student a, int n); /*平均分排序函数声明*/void sort_z(struct student a, int n); /*综合成绩排序函数声明*/void info_2(); /*信息修改函数声明*/void info_3(); /*信息浏览函数声明*/void data_1(); /*考试成绩录入及处理函数声明*/void data_2(); /*测评成绩录入及处理函数声明*/void data_3(); /*数据修改函数声明*/void data_4(); /*数据查询函数声明*/int count;int main(void)one();return 0;void one() /*主菜单函数*/int opt1; /*主菜单项选择项*/printf(" 欢送使用学生综合测评系统 nn");printf(" 1: 学生信息处理 2:学生数据处理nn 3: 学生综合信息");printf(" 4:用户使用指南nn");printf(" 5:退出nn");printf(" 请输入1 2 3 4 5中的任意一个选项进行操作:");loop:scanf("%d", &opt1);switch (opt1)case 1:info();break;case 2:data();break;case 3:look();break;case 4:help();break;case 5:break;default:printf(" 输入错误,请重新输入 1 2 3 4 5中的一项");scanf("%d", &opt1);goto loop;void help()int i;printf("本系统可以存储学生的根本信息和各科成绩,并能计算考试成绩,综合测评成绩和排名。nn ");printf(" 根本信息包括:学号、姓名、性别、家庭住址、联系 ;nn 各科成绩包括:语文、数学、英语成绩;nn");printf(" 其它包括:考试名次、同学互评分、品德成绩、任课教师评分等。nn");printf(" 说明:考试成绩排名是按照考试成绩平均分计算的( 平均分=(语+数+外)/3)nn");printf(" 综合测评总分=(考试成绩)*0.6+同学互评分*0.1+(品德成绩)*0.1n +(任课教师评分)*0.2)nn");printf(" 此系统最多可管理5000人信息。");printf(" 其它请按照提示操作即可。n");printf("返回上一层请输入1");loop:scanf("%d",&i);if(i=1)one();elseprintf("输入错误请重新输入:"); goto loop;void info() /*信息处理函数*/int opt2; /*子菜单项选择项*/printf("nn 欢送进入信息处理 nn");printf(" 1.学生信息录入nn 2.学生信息的修改nn");printf(" 3.返回nn");printf(" 请输入 1 2 3 中的任意一个选项进行操作");loop:scanf("%d", &opt2);switch (opt2)