版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、JISHOU UNIVERSITY本科生课程设计计算机语言程序设计基础I题目:学生信息管理系统开发作 者:学 号: 所属学院: 班 级: 完成时间:评分表序号评分项分数1出勤及表现2功能完善3文档格式与文字表达4代码风格5测试调试6图表7功能设计8目录结构设计9界面与流程10加分合计课程设计工作组长签字:年月日一、 问题分析 . 5二、 总体设计 . 71. 界面设计 72. 数据结构设计 83. 文件结构设计 94. 系统功能结构设计 95. 工程目录结构设计 10三、 模块实现、测试与调试 . 101. 主控模块 10函数原型 10函数定义 10函数测试 122. 界面模块 131)打印菜
2、单功能 132)打印学生卡片 163)打印添加学生提示 184)打印删除学生提示 195) 打印修改学生提示 203. 数据处理模块 211)添加学生功能 212)删除学生功能 243)修改学生功能 264)查询功能 275)浏览功能 6)列表判空功能 277)列表判满功能 284.存储模块 291)读入数据 292)保存数据 31四、 系统集成测试 321.主控模块 +添加学生 322. 主控模块 +添加学生 +存储模块 错误! 未定义书签36五、 总结 43问题分析课程设计的题目为学生信息管理系统开发,要求实现添加学生、删 除学生、修改学生信息、浏览所有学生和查询学生等操作。为了能够把 学
3、生信息永久保存下来需要使用文件。需要保存的数据结构简单,数据 文件采用纯文本文件,扩展名为 txt 。学生信息包括以下几个数据:学号、姓名、性别、班级、宿舍。这 些数据都是字符串类型,学号的长度为 12,姓名的最大长度为 50,性别 的最大长度为 2,班级的最大长度为 30,宿舍的最大长度为 10。性别必 须是男或者女。所有数据均不能为空。添加学生操作要求用户输入学生的所有信息。删除学生操作要求用 户首先输入要删除的学生的学号,然后系统根据学号删除相应数据。修 改学生信息要求用户输入学生的所有信息,然后系统用输入的数据替代 现有的数据。浏览所有学生信息操作把所有学生的信息按照添加的先后 顺序显
4、示出来。查询学生操作要求用户首先输入要删除的学生的学号, 然后系统根据学号找到相应数据,并且显示出来。上述所有操作正常完 成后,不给出任何报告,如果不能正常完成,则给出错误报告。在系统启动时,从数据文件中读入数据,操作过程中数据更新保存 在内存,在系统退出或者用户要求保存时才把内存中的数据保存到文件 中。系统为控制台应用程序,采用控制台菜单作为用户界面。系统总体业务流程见下图总体设计1. 界面设计系统菜单提供与系统需要完成的添加学生、删除学生、修改学生信息、浏览所有学生和查询学生功能相对应的菜单命令,以及保存文件和退出系统的菜单命令。从数据文件中读入数据是在系统启动时自动完成 的,不需要提供相
5、应的菜单命令。下图为命令菜单*学生信息管理系统1。添加学生2。删除学生3。修改学生4。查询学生5。学生列表6。保存文件0。退出系统*浏览所有学生操作的打印结果采用列表方式显示,列表包括三个部分:表格标题、表头和表格数据。下图为学生列表的一个例子。 =学=生名册 = 学号姓名性别班级 宿舍20144055001 冯午阳 男14 通信 1 7#101添加学生给出的提示信息如下图所示,包括操作提示和信息提示两个部分。 添加学生 学号 姓名 性别 班级 宿舍7 / 44修改学生给出的提示信息如下图所示,包括操作提示和信息提示两 个部分。 修改学生 学号 姓名 性别 班级 宿舍 查询学生的结果是学生信息
6、卡,如下图所示,在开始标识和结束标 识之间,以每行一条数据的方式显示各项信息。=学生卡片 =学号: 20144055003姓名:冯午阳性别:男班级: 14 通信 1宿舍: 7#1012. 数据结构设计用结构体存放学生信息,结构体类型 Student 定义如下图所示。其 中使用常量存放各项数据的最大长度。struct Studentchar sidSID_SIZE+1;/学号char nameNAME_SIZE+1;/ 姓名char sexSEX_SIZE+1; /性别char sClassSCLASS_SIZE+1;/ 班级char dormDORM_SIZE+1;/ 宿舍;用数组 sList
7、 存放学生信息表, 用 SIZE 存放数组的最大长度, 用整 型变量 len 保存数组中存放的学生个数 , 并初始化为 0。相关的定义代码 如下图所示。Student sListLIST_SIZE;int len=0;3. 文件结构设计存放学生信息的文件名为 stude ntData.txt ,文件中每行保存一个 学生的数据。每行为5个字符串,中间用一个空格隔开。每个字符串为 一项数据,依次为学号、姓名、性别、班级、宿舍。每项数据为一个没 有空格的字符串。4. 系统功能结构设计除主控模块外,整个系统的主要功能分为三大模块:界面、存储、 数据处理。界面模块包括打印菜单、打印学生卡片、打印添加学生
8、提示、 打印删除学生提示、打印修改学生提示、打印查询学生提示、打印学生 列表、报告表空、报告学生不存在、报告文件错误。存储模块包括读入 数据和保存数据。数据处理模块包括添加学生、删除学生、修改学生、查询、浏览和列表判空。系统功能结构如下图所示5. 工程目录结构设计系统工程名称 StudentMan, main.cpp 中定义 main 函数,实现总体 业务流程的控制, ui.h 、 ui.cpp 中声明、定义界面模块中的各个功能函 数, store.h 、store.cpp 中声明、定义存储模块中的各个功能函数, data.h 、data.cpp 中声明、定义数据处理模块中的各个功能函数。三、
9、模块实现、测试与调试1. 主控模块函数原型int main();函数定义#include #include #include using namespace std;int main()char cmd;/1. 读入数据/cout 读入数据 .endl;printf( 读入数据 .n);/ 循环执行步骤 2、 3、 4while(true)/2. 打印菜单 /cout 菜单 endl; printf( 菜单 n);/3. 输入命令 cmd/cout 请输入命令 (1,2,3,4,5,6,0):cmd;/scanf(%c,&cmd);cmd=getch();switch(cmd)/4. 根据 c
10、mc,分支case O:/4.1 如果 cmd是退出,/4.1.1 保存数据/cout 保存数据 endl;printf( 保存数据 n);/4.1.2 退出系统exit(-1);break;case 6:/4.2 如果 cmd是保存/4.2.1 保存数据/cout 保存数据 endl;printf( 保存数据 n);break;case 1:/4.3 如果 cmd是添加/4.3.1 添加学生/cout 添加学生 endl;printf( 添加学生 n);break;case 2:/4.4 如果 cmd是删除/4.4.1 删除学生/cout 删除学生 endl;printf( 删除学生 n);
11、break;case 3:/4.5 如果cmd是修改/4.5.1 修改学生/cout 修改学生 endl;printf( 修改学生 n);break;case 4:/4.6 如果 cmd是查询/4.6.1 查询学生cout查询学生endl; printf(”查询学生 n);break;case 5:/4.7 如果 cmd是浏览 /4.7.1 打印学生列表 cout学生列表endl; printf(学生列表 n); break;default:printf( 错误命令! n); break;return 0;函数测试测试记录1. 当使用 scanf(%c,&cmd); 输入命令时出现问题。更正办
12、法是: 使用 cmd=getch(); 输入命令。需要包含 conio.h 头文件。2. 界面模块界面模块包括打印菜单、打印学生卡片、打印添加学生提示、打 印删除学生提示、打印修改学生提示、打印查询学生提示、打印学生列 表、报告表空、报告学生不存在、报告文件错误。1) 打印菜单功能函数原型void printMenu();函数定义 void printMenu()printf(*n);printf(学生信息管理系统nprintf(1。添加学生n);printf(2。删除学生n);printf(3。修改学生n);printf(4。查询学生n);printf(5。学生列表n);printf(6。保
13、存文件n);printf(0。退出系统n);printf(*n); 函数测试#include #include #include #include ui.h using namespace std; int main()char cmd;/1. 读入数据/cout 读入数据 .endl;printf( 读入数据 .n);/ 循环执行步骤 2、3、 4while(true)/2. 打印菜单/cout 菜单 endl;/printf(菜单 n);printMenu();/3. 输入命令 cmd/cout 请输入命令 (1,2,3,4,5,6,0):cmd;/scanf(%c,&cmd);cmd=g
14、etch();switch(cmd)/4. 根据 cmc,分支 case 0:/4.1 如果 cmd是退出,/4.1.1 保存数据/cout 保存数据 endl;printf( 保存数据 n);/4.1.2 退出系统exit(-1);break;case 6:/4.2 如果 cmd是保存/4.2.1 保存数据/cout 保存数据 endl;printf( 保存数据 n);break;case 1:/4.3 如果 cmd是添加/4.3.1 添加学生/cout 添加学生 endl;printf( 添加学生 n);break;case 2:/4.4 如果 cmd是删除/4.4.1 删除学生/cout
15、 删除学生 endl;printf( 删除学生 n);break;case 3:/4.5 如果cmd是修改 /4.5.1 修改学生/cout 修改学生 endl; printf( 修改学生 n); break;case 4:/4.6 如果 cmd是查询 /4.6.1 查询学生/cout 查询学生 endl; printf( 查询学生 n); break;case 5:/4.7 如果 cmd是浏览/4.7.1 打印学生列表/cout 学生列表 endl; printf( 学生列表 n); break;default:printf( 错误命令! n); break;return 0;2)浏览功能函
16、数原型void printStudentList(Student sList, int len);函数定义单元测试3)打印学生卡片函数原型 void printStudent(Student s);函数定义void prin tStude nt(Stude nt s)printf(”=学生卡片n);printf(”学号:%sn,s.sid);printf(姓名:%sn,s. name);printf(性别:%sn,s.sex);printf( 班级:%sn,s.sClass);printf(” 宿舍:%sn,s.dorm);prin tf(=n);单元测试测试代码void test_pri n
17、tStude nt()Student s =20144055003, 冯午阳,男,14 通信 1,7#101;prin tStude nt(s);学生卡片=二=二二号茗别级舍 学姓杵班疥2014)5,5003 冯午阻 男 14 信 1 7101Press any key to cotitinue盘空I魯_!琦il占口 电|J課总r 1目三艳 Z I药l q . ./flfio j*测试代码void test_pri ntStude nt()Student s 二20144055003, 韩宇枫, 男,14 通信1,7#101;prin tStude nt(s);的昭男14M7S1号茗别级命 学
18、姓性常Press any key to cotitinue吵|1 eJq 1科百Wf S J,r*Jm-3)打印添加学生提示函数原型 void printAddStudentTips();函数定义void prin tAddStude ntTips()printf(” 添加学生n);printf(”学号 姓名 性别班级宿舍n);单元测试int mai n()prin tAddStude ntTips();return 0;*1 SS i 1-iLl学号姓名 性别班级宿舍 卩ress any key to eontinuo4) 打印删除学生提示函数原型void prin tDeleteTips(
19、);函数定义void prin tDeleteTips()修改学生n);性别班级 宿舍n”);printf(prin tf( 学号姓名单元测试#in clude #i nclude ui.h int mai n()prin tDeleteTips(); return 0;5) 打印修改学生提示函数原型函数定义单元测试打印查询学生提示函数原型函数定义单元测试打印学生列表函数原型函数定义单元测试报告表空函数原型函数定义单元测试报告学生不存在函数原型函数定义单元测试报告文件错误函数原型函数定义单元测试3. 数据处理模块数据处理模块包括添加学生、删除学生、修改学生、查询、浏览和 列表判空。1) 添加学
20、生功能函数原型void addStudent(Student sList,int len,Student s);函数定义void addStudent(Student sList,int *len,Student s) strcpy(sList*len.sid ,s.sid); strcpy(sList* , ); strcpy(sList*len.sex , s.sex); strcpy(sList*len.sClass , s.sClass); strcpy(sList*len.dorm , s.dorm);(*len)+;单元测试void addStudent
21、(Student sList,int *len,Student s) strcpy(sList*len.sid ,s.sid); strcpy(sList* , ); strcpy(sList*len.sex , s.sex); strcpy(sList*len.sClass , s.sClass); strcpy(sList*len.dorm , s.dorm);(*len)+;void test_addStudent() Student sList10; int len=0;Student s =20144055003, 冯 午 阳 , 男 ,14 通 信 1,
22、7#101;addStudent(sList,&len,s); printStudent(sList0); printf( 学生数目: %dn,len); 测试记录1. 第一次的代码 void addStudent(Student sList,int len,Student s) strcpy(sListlen.sid ,s.sid); strcpy(sL , ); strcpy(sListlen.sex , s.sex); strcpy(sListlen.sClass , s.sClass); strcpy(sListlen.dorm , s.dorm);l
23、en+;void test_addStudent() Student sList10; int len=0;Student s =20144055003, 冯 午 阳 , 男 ,14 通 信 1,7#101;addStudent(sList,len,s); printStudent(sList0); printf( 学生数目: %dn,len);学生数目:0-ICl *号名别级舍 学姓性班宿二二二二二学生卡片二=二二二二弓:20144055003I:冯午阳:男I;14通信1:7#101IPress any key to continue 叫 1JI止问题:学生数目应该为1,输出结果是0.分析:
24、说明记录学生数目的变量len的值没有变化。原因是单向值传递。 修改:传递len的地址修改后的代码:void addStude nt(Stude nt sList,i nt *le n,Stude nt s)strcpy(sList*le n.sid ,s.sid);strcpy(sList*le n. name , s.n ame);strcpy(sList*le n.sex , s.sex);strcpy(sList*le n.sClass , s.sClass);strcpy(sList*le n.dorm , s.dorm);(*le n)+;void test_addStude nt(
25、)Stude nt sList10;int len=0;Students 二20144055003,冯午阳,男,14 通信1,7#101;addStude nt(sList,&le n,s);prin tStude nt(sList0);prin tf(学生数目:%dn,le n);测试结果=学生卡片二=二二二二二二吕学号工 20144055003姓名,冯午阳性别:男班级:14通信1宿舍:7W101学生数目,1Press any key to continue2)删除学生功能从学生列表sList中删除编号为i的学生,要求i大于等于0小于 学生数目len。函数原型void deleteStude
26、nt(Student sList,int *len,int i);函数定义void deleteStudent(Student sList,int *len,int i)II把编号i+1到len-1的学生的数据 前移一位 for(;i ui. as fl*-3 01Prss anykey to continue.Ifi4. 存储模块存储模块包括读入数据和保存数据。存放学生信息的文件名为studentData.txt ,文件中每行保存一个学生的数据。每行为5个字符串, 中间用一个空格隔开。每个字符串为一项数据,依次为学号、姓名、性 别、班级、宿舍。每项数据为一个没有空格的字符串。1)读入数据函数
27、原型int readData(char filename, Student sList, int *len);函数定义int readData(char fileName, Student sList, int *len)FILE* fp = fopen(fileName,r);Student s;if(fp = NULL) return 0;while(!feof(fp)fscanf(fp,%s %s %s %s %s,s.sid,,s.sex,s.sClass, s.dorm);addStudent(sList,len,s);fclose(fp);return 1;单元测试vo
28、id test_readData()Student sList10;int len=0;char fileName=studentData.txt;int flag = readData(fileName, sList, &len); int i;if(flag=1)for(i=0; i老制牛1 学姓性班宿=二=学生卡片二=号名别簸全 学H性禿智:20144059001再::wh 斓飢山 | 瓠理)址序| a -i0; 1#/j “fletc jc is-t冯午阳:贯* 1 Jitftlj 7#ltMPiess any key to c ontimiefc;砂1 ”|舟、科B“ 尸财2)保存数
29、据函数原型int saveData(char fileName, Student sList, int len);函数定义int saveData(char fileName, Student sList, int len) int i;FILE* fp = fope n(fileName,w);if(fp=NULL)return 0;for(i=0; ile n; i+)fprintf(fp,%s %s %s %s %sn,sListi.sid,sL, sListi.sex,sListi.sClass,sListi.dorm);fclose(fp);return 1;单元测
30、试void test_saveData() Student sList10;int len=0;char fileName=studentData.txt;char fileName2=studentData2.txt;int flag = readData(fileName, sList, &len);int i;if(flag=1)for(i=0; ilen; i+) printStudent(sListi);elseprintf( 文件访问出错 !);strcpy(sL,fwy); saveData(fileName2, sList, len);studentData2
31、.txt 文件中的内容:20144055001 fwy 男 14 通信 1 7#10120144055001 冯午阳 男 14 通信 1 7#10220144055001 冯午阳 男 14 通信 1 7#10320144055001 冯午阳 男 14 通信 1 7#104四、系统集成测试1.主控模块 +添加学生测试代码#include #include #include #include ui.husing namespace std;int main()/test_printStudent();/printAddStudentTips();/test_addStudent();/test_f
32、ullSList();/return 0;char cmd;Student sListLIST_SIZE;int len=0;Student s;/1. 读入数据/cout 读入数据 .endl;printf(读入数据 .n);/ 循环执行步骤 2、 3、 4while(true)/2. 打印菜单/cout 菜单 endl;/printf(菜单 n);printMenu();/3. 输入命令 cmd/cout 请输入命令 (1,2,3,4,5,6,0):cmd;/scanf(%c,&cmd);cmd=getch();switch(cmd)/4. 根据 cmc,分支case O:/4.1 如果
33、cmd是退出,/4.1.1 保存数据/cout 保存数据 endl;printf( 保存数据 n);/4.1.2 退出系统exit(-1);break;case 6:/4.2 如果 cmd是保存/4.2.1 保存数据/cout 保存数据 endl;printf( 保存数据 n); break;case 1:/4.3 如果 cmd是添加/4.3.1 添加学生/cout 添加学生 endl;/printf( 添加学生 n);if(fullSList(len)/ 判满/ 报告错误 printf( 空间已满! n);else/ 添加 printAddStudentTips();/ 提示 scanf(%
34、s %s %s %s %s,s.sid,,s.sex,s.sClass,s.dorm); addStudent(sList,&len,s);printStudent(sListlen-1);break;case 2:/4.4如果 cmd 是删除/4.4.1 删除学生/cout 删除学生 endl; printf( 删除学生 n);break;case 3:/4.5如果 cmd 是修改/4.5.1 修改学生/cout 修改学生 endl; printf( 修改学生 n);break;case 4:/4.6如果 cmd 是查询/4.6.1 查询学生/cout 查询学生 endl; pr
35、intf( 查询学生 n);break;case 5:/4.7如果 cmd 是浏览/4.7.1 打印学生列表/cout 学生列表 endl; printf( 学生列表 n);break;default:printf( 错误命令! n);break;return 0;渎入数据.紳桶樓*京溶林柑C祕*吿和E斜*学生信息管理系统lu添加羊生2, 删除学生3。修改学生4口查询学生5,学生列表6保存文件0退出系统谒输入命令(XZ 3, 4, S, & 0):淤加学4z 学号姓名 性别班级宿舍20154055001 tyy 男 15通信 1 1502号名别怨兮川学姓性班宿訂二二一学生卡片“一:2U1540
36、55001:tyy匕男:1百通信1 1502” 1也&亘石A| -r |r*V)=會耳込共艺门把上面的 int len=0; 语句改为 int len=LIST SIZE;YJd.i*电aAMll-uSJOF .;词去jj *2. 主控模块 +添加学生 +存储模块#include #include #include #include ui.h#include store.husing namespace std;int main()/test_printStudent();/printAddStudentTips();/test_addStudent();/test_fullSList();/
37、test_readData();/test_saveData();/return 0;char cmd;Student sListLIST_SIZE;int len=0;Student s;int flag;char fileName=studentData.txt;/1. 读入数据/cout 读入数据 .endl;/printf( 读入数据 .n);flag = readData(fileName, sList, &len);if(flag = 0)printf( 打开文件出错! );exit(-1);/ 循环执行步骤 2、 3、 4 while(true)/2. 打印菜单/cout 菜单
38、endl; /printf( 菜单 n); printMenu();/3. 输入命令 cmd/cout 请输入命令 (1,2,3,4,5,6,0):cmd;/scanf(%c,&cmd); cmd=getch();switch(cmd)/4. 根据 cmc,分支case O:/4.1 如果 cmd是退出, /4.1.1 保存数据/cout 保存数据 endl; /printf( 保存数据 n);flag = saveData(fileName, sList, len); if(flag = O)printf( 文件访问出错! ); exit(-1);/4.1.2 退出系统 exit(O);case 6:/4.2 如果 cmd是保存/4.2.1 保存数据/cout 保存数据 endl;/printf( 保存数据 n);flag = saveData(fileName, sList, len); if(flag = O)printf( 文件访问出错! );exit(-1);break;case 1:/4.3 如果 cmd是添加/4.3.1 添加学生/cout 添加学生 endl;/printf( 添加学生 n);if(fullSList(len)/ 判满/ 报告错误 p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 常州市溧阳中学高三地理二轮复习区域地理作业
- 2026年珠宝鉴定师能力(品质评估)考题及答案
- 2025年大学环境工程(污水处理工艺设计)试题及答案
- 2026年专利代理师(专利法律知识)试题及答案
- 2026下半年托福(iBT)口语话题素材与应答技巧
- 2025年中职水产养殖技术(成鱼养殖)试题及答案
- 高一生物(真题演练)2027年上学期期末考核卷
- 2026年注册公路工程师(专业考试)试题及答案
- 2025年大学自动化(机器人减排研究)试题及答案
- 金融科技 习题及答案题库汇 - 第1-6章
- DB53∕T 1269-2024 改性磷石膏用于矿山废弃地生态修复回填技术规范
- GB/T 43935-2024矿山土地复垦与生态修复监测评价技术规范
- 酸枣种植知识讲座
- Axure RP9 网站与App原型设计实战案例教程PPT完整全套教学课件
- 《生于忧患死于安乐》文章结构
- 1+X测绘地理信息智能应用练习题(含参考答案)
- 译林版五年级英语上册全册课件
- 磷石膏基公路基层材料 技术规范 编制说明
- 电大专科《管理英语1》历年期末考试试题及答案汇编
- 《非政府组织管理》教学大纲
- GB/T 19809-2005塑料管材和管件聚乙烯(PE)管材/管材或管材/管件热熔对接组件的制备
评论
0/150
提交评论