版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
44/44JISHOUUNIVERSITY本科生课程设计计算机语言程序设计基础I题目:学生信息管理系统开发作者:学号:所属学院:班级:完成时间:
评分表序号评分项分数1出勤及表现2功能完善3文档格式与文字表达4代码风格5测试调试6图表7功能设计8目录结构设计9界面与流程10加分合计课程设计工作组长签字:年月日
目录一、 问题分析 5二、 总体设计 71. 界面设计 72. 数据结构设计 83. 文件结构设计 94. 系统功能结构设计 95. 工程目录结构设计 10三、 模块实现、测试与调试 101. 主控模块 10函数原型 10函数定义 10函数测试 122. 界面模块 131)打印菜单功能 132)打印学生卡片 163)打印添加学生提示 184)打印删除学生提示 195)打印修改学生提示 203. 数据处理模块 211)添加学生功能 212)删除学生功能 243)修改学生功能 264)查询功能 275)浏览功能 276)列表判空功能 287)列表判满功能 294. 存储模块 291)读入数据 302)保存数据 31四、 系统集成测试 321.主控模块+添加学生 322.主控模块+添加学生+存储模块 36五、 总结 40
问题分析课程设计的题目为学生信息管理系统开发,要求实现添加学生、删除学生、修改学生信息、浏览所有学生和查询学生等操作。为了能够把学生信息永久保存下来需要使用文件。需要保存的数据结构简单,数据文件采用纯文本文件,扩展名为txt。学生信息包括以下几个数据:学号、姓名、性别、班级、宿舍。这些数据都是字符串类型,学号的长度为12,姓名的最大长度为50,性别的最大长度为2,班级的最大长度为30,宿舍的最大长度为10。性别必须是男或者女。所有数据均不能为空。添加学生操作要求用户输入学生的所有信息。删除学生操作要求用户首先输入要删除的学生的学号,然后系统根据学号删除相应数据。修改学生信息要求用户输入学生的所有信息,然后系统用输入的数据替代现有的数据。浏览所有学生信息操作把所有学生的信息按照添加的先后顺序显示出来。查询学生操作要求用户首先输入要删除的学生的学号,然后系统根据学号找到相应数据,并且显示出来。上述所有操作正常完成后,不给出任何报告,如果不能正常完成,则给出错误报告。在系统启动时,从数据文件中读入数据,操作过程中数据更新保存在内存,在系统退出或者用户要求保存时才把内存中的数据保存到文件中。系统为控制台应用程序,采用控制台菜单作为用户界面。系统总体业务流程见下图。启动启动从文件读入数据从文件读入数据输入菜单命令cmd打印菜单输入菜单命令cmd打印菜单cmdcmd其他操作保存退出其他操作保存退出完成相应功能把数据保存到文件把数据保存到文件完成相应功能把数据保存到文件把数据保存到文件结束结束
总体设计界面设计系统菜单提供与系统需要完成的添加学生、删除学生、修改学生信息、浏览所有学生和查询学生功能相对应的菜单命令,以及保存文件和退出系统的菜单命令。从数据文件中读入数据是在系统启动时自动完成的,不需要提供相应的菜单命令。下图为命令菜单。***************************学生信息管理系统1。添加学生2。删除学生3。修改学生4。查询学生5。学生列表6。保存文件0。退出系统***************************浏览所有学生操作的打印结果采用列表方式显示,列表包括三个部分:表格标题、表头和表格数据。下图为学生列表的一个例子。======================学生名册=======================学号 姓名 性别 班级 宿舍20144055001 冯午阳 男 14通信1 7#101=====================================================添加学生给出的提示信息如下图所示,包括操作提示和信息提示两个部分。添加学生学号 姓名 性别 班级 宿舍修改学生给出的提示信息如下图所示,包括操作提示和信息提示两个部分。修改学生学号姓名性别班级宿舍查询学生的结果是学生信息卡,如下图所示,在开始标识和结束标识之间,以每行一条数据的方式显示各项信息。=========学生卡片=========学号:20144055003姓名:冯午阳性别:男班级:14通信1宿舍:7#101==========================数据结构设计用结构体存放学生信息,结构体类型Student定义如下图所示。其中使用常量存放各项数据的最大长度。structStudent{charsid[SID_SIZE+1];//学号charname[NAME_SIZE+1];//姓名charsex[SEX_SIZE+1];//性别charsClass[SCLASS_SIZE+1];//班级chardorm[DORM_SIZE+1];//宿舍};用数组sList存放学生信息表,用SIZE存放数组的最大长度,用整型变量len保存数组中存放的学生个数,并初始化为0。相关的定义代码如下图所示。StudentsList[LIST_SIZE];intlen=0;文件结构设计存放学生信息的文件名为studentData.txt,文件中每行保存一个学生的数据。每行为5个字符串,中间用一个空格隔开。每个字符串为一项数据,依次为学号、姓名、性别、班级、宿舍。每项数据为一个没有空格的字符串。系统功能结构设计除主控模块外,整个系统的主要功能分为三大模块:界面、存储、数据处理。界面模块包括打印菜单、打印学生卡片、打印添加学生提示、打印删除学生提示、打印修改学生提示、打印查询学生提示、打印学生列表、报告表空、报告学生不存在、报告文件错误。存储模块包括读入数据和保存数据。数据处理模块包括添加学生、删除学生、修改学生、查询、浏览和列表判空。系统功能结构如下图所示。总控模块总控模块保存数据读入数据存储模块数据处理模块界面模块保存数据读入数据存储模块数据处理模块界面模块判满打印菜单报告文件错误报告学生不存在打印添加提示卡片打印学生卡片判空浏览查询修改学生删除学生添加学生报告表空打印学生列表卡片打印判满打印菜单报告文件错误报告学生不存在打印添加提示卡片打印学生卡片判空浏览查询修改学生删除学生添加学生报告表空打印学生列表卡片打印修改提示卡片打印查询提示卡片打印删除提示卡片工程目录结构设计系统工程名称StudentMan,main.cpp中定义main函数,实现总体业务流程的控制,ui.h、ui.cpp中声明、定义界面模块中的各个功能函数,store.h、store.cpp中声明、定义存储模块中的各个功能函数,data.h、data.cpp中声明、定义数据处理模块中的各个功能函数。模块实现、测试与调试主控模块函数原型intmain();函数定义#include<iostream>#include<cstdio>#include<conio.h>usingnamespacestd;intmain(){ charcmd; //1.读入数据 //cout<<"读入数据..."<<endl; printf("读入数据...\n"); ///循环执行步骤2、3、4 while(true){ //2.打印菜单 //cout<<"菜单"<<endl; printf("菜单\n"); //3.输入命令cmd //cout<<"请输入命令(1,2,3,4,5,6,0):"<<endl; printf("请输入命令(1,2,3,4,5,6,0):\n"); //cin>>cmd; //scanf("%c",&cmd); cmd=getch(); switch(cmd){//4.根据cmd,分支 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<<"删除学生"<<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; } } return0;}函数测试测试记录1.当使用scanf("%c",&cmd);输入命令时出现问题。更正办法是:使用cmd=getch();输入命令。需要包含conio.h头文件。界面模块界面模块包括打印菜单、打印学生卡片、打印添加学生提示、打印删除学生提示、打印修改学生提示、打印查询学生提示、打印学生列表、报告表空、报告学生不存在、报告文件错误。1)打印菜单功能函数原型voidprintMenu();函数定义voidprintMenu(){ printf("***************************\n"); printf("学生信息管理系统\n"); printf("1。添加学生\n"); printf("2。删除学生\n"); printf("3。修改学生\n"); printf("4。查询学生\n"); printf("5。学生列表\n"); printf("6。保存文件\n"); printf("0。退出系统\n"); printf("***************************\n"); }函数测试#include<iostream>#include<cstdio>#include<conio.h>#include"ui.h"usingnamespacestd;intmain(){ charcmd; //1.读入数据 //cout<<"读入数据..."<<endl; printf("读入数据...\n"); ///循环执行步骤2、3、4 while(true){ //2.打印菜单 //cout<<"菜单"<<endl; //printf("菜单\n"); printMenu(); //3.输入命令cmd //cout<<"请输入命令(1,2,3,4,5,6,0):"<<endl; printf("请输入命令(1,2,3,4,5,6,0):\n"); //cin>>cmd; //scanf("%c",&cmd); cmd=getch(); switch(cmd){//4.根据cmd,分支 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<<"删除学生"<<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; } } return0;}2)浏览功能函数原型voidprintStudentList(StudentsList[],intlen);函数定义单元测试3)打印学生卡片函数原型voidprintStudent(Students);函数定义voidprintStudent(Students){ printf("=========学生卡片=========\n"); printf("学号:%s\n",s.sid); printf("姓名:%s\n",); printf("性别:%s\n",s.sex); printf("班级:%s\n",s.sClass); printf("宿舍:%s\n",s.dorm); printf("==========================\n"); }单元测试测试代码voidtest_printStudent(){ Students={"20144055003","冯午阳","男","14通信1","7#101"}; printStudent(s);}测试代码voidtest_printStudent(){ Students={"20144055003","韩宇枫","男","14通信1","7#101"}; printStudent(s);}3)打印添加学生提示函数原型voidprintAddStudentTips();函数定义voidprintAddStudentTips(){ printf("添加学生\n"); printf("学号姓名性别班级宿舍\n"); }单元测试intmain(){ printAddStudentTips(); return0;}4)打印删除学生提示函数原型voidprintDeleteTips();函数定义voidprintDeleteTips(){ printf("修改学生\n"); printf("学号姓名性别班级宿舍\n");}单元测试#include<stdio.h>#include"ui.h"intmain(){ printDeleteTips(); return0;}5)打印修改学生提示函数原型函数定义单元测试打印查询学生提示函数原型函数定义单元测试打印学生列表函数原型函数定义单元测试报告表空函数原型函数定义单元测试报告学生不存在函数原型函数定义单元测试报告文件错误函数原型函数定义单元测试数据处理模块数据处理模块包括添加学生、删除学生、修改学生、查询、浏览和列表判空。1)添加学生功能函数原型voidaddStudent(StudentsList[],intlen,Students);函数定义voidaddStudent(StudentsList[],int*len,Students){ strcpy(sList[*len].sid,s.sid); strcpy(sList[*len].name,); strcpy(sList[*len].sex,s.sex); strcpy(sList[*len].sClass,s.sClass); strcpy(sList[*len].dorm,s.dorm); (*len)++; }单元测试voidaddStudent(StudentsList[],int*len,Students){ strcpy(sList[*len].sid,s.sid); strcpy(sList[*len].name,); strcpy(sList[*len].sex,s.sex); strcpy(sList[*len].sClass,s.sClass); strcpy(sList[*len].dorm,s.dorm); (*len)++; }voidtest_addStudent(){ StudentsList[10]; intlen=0; Students={"20144055003","冯午阳","男","14通信1","7#101"}; addStudent(sList,&len,s); printStudent(sList[0]); printf("学生数目:%d\n",len);}测试记录第一次的代码voidaddStudent(StudentsList[],intlen,Students){ strcpy(sList[len].sid,s.sid); strcpy(sList[len].name,); strcpy(sList[len].sex,s.sex); strcpy(sList[len].sClass,s.sClass); strcpy(sList[len].dorm,s.dorm); len++; }voidtest_addStudent(){ StudentsList[10]; intlen=0; Students={"20144055003","冯午阳","男","14通信1","7#101"}; addStudent(sList,len,s); printStudent(sList[0]); printf("学生数目:%d\n",len);}问题:学生数目应该为1,输出结果是0.分析:说明记录学生数目的变量len的值没有变化。原因是单向值传递。修改:传递len的地址修改后的代码:voidaddStudent(StudentsList[],int*len,Students){ strcpy(sList[*len].sid,s.sid); strcpy(sList[*len].name,); strcpy(sList[*len].sex,s.sex); strcpy(sList[*len].sClass,s.sClass); strcpy(sList[*len].dorm,s.dorm); (*len)++; }voidtest_addStudent(){ StudentsList[10]; intlen=0; Students={"20144055003","冯午阳","男","14通信1","7#101"}; addStudent(sList,&len,s); printStudent(sList[0]); printf("学生数目:%d\n",len);}测试结果2)删除学生功能从学生列表sList中删除编号为i的学生,要求i大于等于0小于学生数目len。函数原型voiddeleteStudent(StudentsList[],int*len,inti);函数定义voiddeleteStudent(StudentsList[],int*len,inti){ //把编号i+1到len-1的学生的数据前移一位 for(;i<=*len-2;i++){ sList[i]=sList[i+1]; } //学生数目减1 (*len)--;}单元测试voidtest_deleteStudent(){ StudentsList[10]; intlen=0; charfileName[]="studentData.txt"; charfileName2[]="studentData2.txt"; intflag=readData(fileName,sList,&len); deleteStudent(sList,&len,len/2); saveData(fileName2,sList,len);}studentData.txt文件的内容20144055001冯午阳男14通信17#10120144055001冯午阳男14通信17#10220144055001冯午阳男14通信17#10320144055001冯午阳男14通信17#104111www男14tong11702运行test_deleteStudent()后studentData2.txt文件的内容20144055001冯午阳男14通信17#10120144055001冯午阳男14通信17#10220144055001冯午阳男14通信17#103111www男14tong11702111www男14tong11702调试代码voidtest_deleteStudent(){ StudentsList[10]; intlen=0; charfileName[]="studentData.txt"; charfileName2[]="studentData2.txt"; intflag=readData(fileName,sList,&len); printf("%d\n",len); deleteStudent(sList,&len,len/2); printf("%d\n",len); saveData(fileName2,sList,len);}根据调试结果,我们发现在数据文件studentData.txt中如果最后一行有换行符,则readData函数会多读入一条数据。修改readData函数,用fgetc(fp);fgetc(fp);吸收掉每行末尾的\r\readData(charfileName[],StudentsList[],int*len){ FILE*fp=fopen(fileName,"r"); Students;if(fp==NULL){ return0; } while(!feof(fp)){ fscanf(fp,"%s%s%s%s%s",s.sid,,s.sex,s.sClass,s.dorm); fgetc(fp);fgetc(fp); addStudent(sList,len,s); } fclose(fp); return1;}3)修改学生功能函数原型intupdateStudent(StudentsList[],intlen,Students);函数定义intupdateStudent(StudentsList[],intlen,Students){ intp=find(sList,len,s.sid); if(p==-1){ return0; }else{ //strcpy(sList[p].sid,s.sid); strcpy(sList[p].name,); strcpy(sList[p].sex,s.sex); strcpy(sList[p].sClass,s.sClass); strcpy(sList[p].dorm,s.dorm); return1; }}单元测试voidtest_updateStudent(){ StudentsList[10]; intlen=0; intstatus; Students={"20144055003","pppp","0","1414","7501"}; charfileName[]="studentData.txt"; intflag=readData(fileName,sList,&len); status=updateStudent(sList,len,s); printf("%d\n",status); saveData(fileName,sList,len);}数据文件studentData.txt原来的内容:20144055001fwy男14通信17#10320144055002fwy男14通信17#10420144055003tttt男14通信17#104执行函数test_updateStudent()后,数据文件studentData.txt的内容:20144055001fwy男14通信17#10320144055002fwy男14通信17#10420144055003pppp0141475014)查询功能函数原型函数定义单元测试6)列表判空功能函数原型intemptySList(intlen);函数定义intemptySList(intlen){ if(len==0){ return1; }else{ return0; }}单元测试voidtest_emptySList(){ intlen=LIST_SIZE-1; intflag=emptySList(len); printf("%d\n",flag); len=LIST_SIZE; flag=emptySList(len); printf("%d\n",flag); len=0; flag=emptySList(len); printf("%d\n",flag);}7)列表判满功能函数原型intfullSList(intlen);函数定义intfullSList(intlen){ if(len==LIST_SIZE){ return1; }else{ return0; }}单元测试voidtest_fullSList(){ intlen=LIST_SIZE-1; intflag=fullSList(len); printf("%d\n",flag); len=LIST_SIZE; flag=fullSList(len); printf("%d\n",flag);}存储模块存储模块包括读入数据和保存数据。存放学生信息的文件名为studentData.txt,文件中每行保存一个学生的数据。每行为5个字符串,中间用一个空格隔开。每个字符串为一项数据,依次为学号、姓名、性别、班级、宿舍。每项数据为一个没有空格的字符串。1)读入数据函数原型intreadData(charfilename[],StudentsList[],int*len);函数定义intreadData(charfileName[],StudentsList[],int*len){ FILE*fp=fopen(fileName,"r"); Students;if(fp==NULL){ return0; } while(!feof(fp)){ fscanf(fp,"%s%s%s%s%s",s.sid,,s.sex,s.sClass,s.dorm); addStudent(sList,len,s); } fclose(fp); return1;}单元测试voidtest_readData(){ StudentsList[10]; intlen=0; charfileName[]="studentData.txt"; intflag=readData(fileName,sList,&len); inti; if(flag==1){ for(i=0;i<len;i++){ printStudent(sList[i]); } }else{ printf("文件访问出错!"); }}studentData.txt文件的内容:20144055001冯午阳男14通信17#10120144055001冯午阳男14通信17#10220144055001冯午阳男14通信17#10320144055001冯午阳男14通信17#1042)保存数据函数原型intsaveData(charfileName[],StudentsList[],intlen);函数定义intsaveData(charfileName[],StudentsList[],intlen){ inti; FILE*fp=fopen(fileName,"w");if(fp==NULL){ return0; } for(i=0;i<len;i++){ fprintf(fp,"%s%s%s%s%s\n",sList[i].sid,sList[i].name,sList[i].sex,sList[i].sClass,sList[i].dorm); } fclose(fp); return1;}单元测试voidtest_saveData(){ StudentsList[10]; intlen=0; charfileName[]="studentData.txt"; charfileName2[]="studentData2.txt"; intflag=readData(fileName,sList,&len); inti; if(flag==1){ for(i=0;i<len;i++){ printStudent(sList[i]); } }else{ printf("文件访问出错!"); } strcpy(sList[0].name,"fwy"); saveData(fileName2,sList,len);}studentData2.txt文件中的内容:20144055001fwy男14通信17#10120144055001冯午阳男14通信17#10220144055001冯午阳男14通信17#10320144055001冯午阳男14通信17#104系统集成测试1.主控模块+添加学生测试代码#include<iostream>#include<cstdio>#include<conio.h>#include"ui.h"usingnamespacestd;intmain(){ //test_printStudent(); //printAddStudentTips(); //test_addStudent(); //test_fullSList(); //return0; charcmd; StudentsList[LIST_SIZE]; intlen=0; Students; //1.读入数据 //cout<<"读入数据..."<<endl; printf("读入数据...\n"); ///循环执行步骤2、3、4 while(true){ //2.打印菜单 //cout<<"菜单"<<endl; //printf("菜单\n"); printMenu(); //3.输入命令cmd //cout<<"请输入命令(1,2,3,4,5,6,0):"<<endl; printf("请输入命令(1,2,3,4,5,6,0):\n"); //cin>>cmd; //scanf("%c",&cmd); cmd=getch(); switch(cmd){//4.根据cmd,分支 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"); if(fullSList(len)){//判满 //报告错误 printf("空间已满!!\n"); }else{//添加 printAddStudentTips();//提示 scanf("%s%s%s%s%s",s.sid,,s.sex,s.sClass,s.dorm); addStudent(sList,&len,s); printStudent(sList[len-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; printf("查询学生\n"); break; case'5'://4.7如果cmd是浏览 //4.7.1打印学生列表 //cout<<"学生列表"<<endl; printf("学生列表\n"); break; default: printf("错误命令!\n"); break; } } return0;}把上面的intlen=0;语句改为intlen=LIST_SIZE;2.主控模块+添加学生+存储模块#include<iostream>#include<cstdio>#include<conio.h>#include"ui.h"#include"store.h"usingnamespacestd;intmain(){ //test_printStudent(); //printAddStudentTips(); //test_addStudent(); //test_fullSList(); //test_readData(); //test_saveData(); //return0; charcmd; StudentsList[LIST_SIZE]; intlen=0; Students; intflag; charfileName[]="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<<"菜单"<<endl; //printf("菜单\n"); printMenu(); //3.输入命令cmd //cout<<"请输入命令(1,2,3,4,5,6,0):"<<endl; printf("请输入命令(1,2,3,4,5,6,0):\n"); //cin>>cmd; //scanf("%c",&cmd); cmd=getch(); switch(cmd){//4.根据cmd,分支 case'0'://4.1如果cmd是退出, //4.1.1保存数据 //cout<<"保存数据"<<endl; //printf("保存数据\n"); flag=saveData(fileName,sList,len); if(flag==0){ printf("文件访问出错!"); exit(-1); } //4.1.2退出系统 exit(0); case'6'://4.2如果cmd是保存 //4.2.1保存数据 //cout<<"保存数据"<<endl; //printf("保存数据\n"); flag=saveData(fileName,sList,len); if(flag==0){ printf("文件访问出错!"); exit(-1); } break; case'1'://4.3如果cmd是添加 //4.3.1添加学生 //cout<<"添加学生"<<endl; //printf("添加学生\n"); if(fullSList(len)){//判满 //报告错误 printf("空间已满!!\n"); }else{//添加 printAddStudentTips();//提示 scanf("%s%s%s%s%s",s.sid,,s.sex,s.sClass,s.dorm); addStudent(sList,&len,s); //printStudent(sList[len-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; printf("查询学生\n"); break; case'5'://4.7如果cmd是浏览 //4.7.1打印学生列表 //cout<<"学生列表"<<endl; printf("学生列表\n"); break; default: printf("错误命令!\n"); break; } } return0;}studentData.txt文件原来的内容:20144055001冯午阳男14通信17#10120144055001冯午阳男14通信17#10220144055001冯午阳男14通信17#10320144055001冯午阳男14通信17#104添加学生后studentData.txt文件的内容:20144055001冯午阳男14通信17#10120144055001冯午阳男14通信17#10220144055001冯午阳男14通信17#10320144055001冯午阳男14通信17#104111www男14tong117023.主控模块+添加学生+删除学生+存储模块4.主控模块+添加学生+删除学生+修改学生+存储模块#include<iostream>#include<cstdio>#include<conio.h>#include"ui.h"#include"store.h"usingnamespacestd;intmain(){ //test_printStudent(); //printAddStudentTips(); //test_addStudent(); //test_fullSList(); //test_readData(); //test_saveData(); //printUpdateTips(); //test_deleteStudent(); //test_emptySList();// test_find(); //test_updateStudent(); //return0; charcmd; StudentsList[LIST_SIZE]; intlen=0; Students; intflag; charsid[SID_SIZE+1]; intindex; charfileName[]="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<<"菜单"<<endl; //printf("菜单\n"); printMenu(); //3.输入命令cmd //cout<<"请输入命令(1,2,3,4,5,6,0):"<<endl; printf("请输入命令(1,2,3,4,5,6,0):\n"); //cin>>cmd; //scanf("%c",&cmd); cmd=getch(); switch(cmd){//4.根据cmd,分支 case'0'://4.1如果cmd是退出, //4.1.1保存数据 //cout<<"保存数据"<<endl; //printf("保存数据\n"); flag=saveData(fileName,sList,len); if(flag==0){ printf("文件访问出错!"); exit(-1); } //4.1.2退出系统 exit(0); case'6'://4.2如果cmd是保存 //4.2.1保存数据 //cout<<"保存数据"<<endl; //printf("保存数据\n"); flag=saveData(fileName,sList,len); if(flag==0){ printf("文件访问出错!"); exit(-1); } break; case'1'://4.3如果cmd是添加 //4.3.1添加学生 //cout<<"添加学生"<<endl; //printf("添加学生\n"); if(fullSList(len)){//判满 //报告错误 printf("空间已满!!\n"); }else{//添加 printAddStudentTips();//提示 scanf("%s%s%s%s%s",s.sid,,s.sex,s.sClass,s.dorm); addStudent(sList,&len,s); //printStudent(sList[len-1]); } break; case'2'://4.4如果cmd是删除 //4.4.1删除学生 //cout<<"删除学生"<<endl; //printf("删除学生\n"); if(emptySList(len)){//判空 //报告错误 printf("没有学生!!\n"); }else{//删除 printDeleteTips();//提示 scanf("%s",sid); index=find(sList,len,sid); if(index>=0){ deleteStudent(sList,&len,index); }else{ printf("ERROR:没有学号为%s的学生!\n",sid); } //printStudent(sList[len-1]); } break; case'3'://4.5如果cmd是修改 //4.5.1修改学生 //cout<<"修改学生"<<endl; //printf("修改学生\n"); printUpdateTips(); scanf("%s%s%s%s%s",s.sid,,s.sex,s.sClass,s.dorm); flag=updateStudent(sList,len,s); if(flag==0){ printf("ERROR:没有学号为%s的学生!\n",s.sid); } 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; } } return0;}总结基于C8051F单片机直流电动机反馈控制系统的设计与研究基于单片机的嵌入式Web服务器的研究MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究基于模糊控制的电阻钎焊单片机温度控制系统的研制基于MCS-51系列单片机的通用控制模块的研究基于单片机实现的供暖系统最佳启停自校正(STR)调节器单片机控制的二级倒立摆系统的研究基于增强型51系列单片机的TCP/IP协议栈的实现基于单片机的蓄电池自动监测系统基于32位嵌入式单片机系统的图像采集与处理技术的研究基于单片机的作物营养诊断专家系统的研究基于单片机的交流伺服电机运动控制系统研究与开发基于单片机的泵管内壁硬度测试仪的研制基于单片机的自动找平控制系统研究基于C8051F040单片机的嵌入式系统开发基于单片机的液压动力系统状态监测仪开发模糊Smith智能控制方法的研究及其单片机实现一种基于单片机的轴快流CO〈,2〉激光器的手持控制面板的研制基于双单片机冲床数控系统的研究基于CYGNAL单片机的在线间歇式浊度仪的研制基于单片机的喷油泵试验台控制器的研制基于单片机的软起动器的研究和设计基于单片机控制的高速快走丝电火花线切割机床短循环走丝方式研究基于单片机的机电产品控制系统开发基于PIC单片机的智能手机充电器基于单片机的实时内核设计及其应用研究基于单片机的远程抄表系统的设计与研究基于单片机的烟气二氧化硫浓度检测仪的研制基于微型光谱仪的单片机系统单片机系统软件构件开发的技术研究基于单片机的液体点滴速度自动检测仪的研制基于单片机系统的多功能温度测量仪的研制基于PIC单片机的电能采集终端的设计和应用基于单片机的光纤光栅解调仪的研制气压式线性摩擦焊机单片机控制系统的研制基于单片机的数字磁通门传感器基于单片机的旋转变压器-数字转换器的研究基于单片机的光纤Bragg光栅解调系统的研究单片机控制的便携式多功能乳腺治疗仪的研制基于C8051F020单片机的多生理信号检测仪基于单片机的电机运动控制系统设计Pico专用单片机核的可测性设计研究基于MCS-51单片机的热量计基于双单片机的智能遥测微型气象站MCS-51单片机构建机器人的实践研究基于单片机的轮轨力检测基于单片机的GPS定位仪的研究与实现基于单片机的电液伺服控制系统用于单片机系统的MMC卡文件系统研制基于单片机的时控和计数系统性能优化的研究基于单片机和CPLD的粗光栅位移测量系统研究单片机控制的后备式方波UPS提升高职学生单片机应用能力的探究基于单片机控制的自动低频减载装置研究基于单片机控制的水下焊接电源的研究基于单片机的多通道数据采集系统基于uPSD3234单片机的氚表面污染测量仪的研制基于单片机的红外测油仪的研究96系列单片机仿真器研究与设计基于单片机的单晶金刚石刀具刃磨设备的数控改造基于单片机的温度智能控制系统的设计与实现基于MSP430单片机的电梯门机控制器的研制基于单片机的气体测漏仪的研究基于三菱M16C/6N系列单片机的CAN/USB协议转换器基于单片机和DSP的变压器油色谱在线监测技术研究基于单片机的膛壁温度报警系统设计基于AVR单片机的低压无功补偿控制器的设计基于单片机船舶电力推进电机监测系统基于单片机网络的振动信号的采集系统基于单片机的大容量数据存储技术的应用研究基于单片机的叠图机研究与教学方法实践基于单片机嵌入式Web服务器技术的研究及实现基于AT89S52单片机的通用数据采集系统\t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护士聘用合同样本
- 恐怖袭击防控人防施工合同
- 交通运输库房管理员招聘合同
- 人工智能技术应用投资合同三篇
- 采购合同范例带附件格式
- 阀门研磨合同范例
- 填写装修合同范例
- 生物科技园区建设及装修工程合同三篇
- 外雇人员安全生产管理协议书
- 工业污水处理运营服务合同范本
- 财产清查课件
- 广告牌拆除施工方案
- 某机械厂降压变电所电气初步设计
- 2014附件3杆塔高处作业防坠技术措施0825
- 建筑工程挂靠协议书范本3篇
- 细胞信号传导
- 工程设计变更管理台账
- NJR2-D系列软起动器出厂参数设置表
- (财务预算编制)全面预算例题及答案
- 光缆分光分纤盒施工及验收方案
- 10000吨新型干法水泥厂优秀毕业设计设计优秀毕业设计水泥厂10000吨水泥
评论
0/150
提交评论