当前位置:文档之家› 实验设备管理系统程序报告(DOC 51页)

实验设备管理系统程序报告(DOC 51页)

实验设备管理系统程序报告(DOC 51页)目录一、需求与功能分析第二章概要设计 (5)2.1总体设计52.2面向对象设计52.3运行界面设计6第三章详细设计 (7)3.1 系统设计与实现 (7)3.2 模块设计 (8)第四章测试分析 (10)第五章课程设计总结 (10)附录:程序代码(仅电子版需要、纸质版不需要)..................................................................................一、需求与功能分析1.1需求为了方便管理校内各种实验设备,能够翻遍快捷的录入查询各个实验设备的基本信息而编写了此程序实验设备管理系统设计实验设备信息包括:设备编号,设备种类(如:微机、打印机、扫描仪等等),设备名称,设备价格,设备购入日期,是否报废,报废日期等。

1.2主要功能:1、能够完成对设备的录入和修改。

2、对设备进行分类统计。

4、设备的破损耗费和遗损处理。

4、设备的查询。

1.3功能需求1、可实现管理员登陆管理系统,游客查询系统。

2、对实验设备类型的管理。

3、对实验设备各项信息的录入和修改。

4、对实验设备的分类查询统计。

5、对实验设备的遗损处理二、概要设计2.1总体设计程序总体共分为4个类:1、菜单类2、设备类型类3、设备类4、管理员类由主函数主持整体运行,由菜单类调用其它三类2.1 面向对象设计1.设备类型类:(见图2)void shuru(); //设备类型的输入void tianjia(); //设备类型的添加void shanchu(); //设备类型的删除void show(); //设备类型的输出显示void xieru(); //设备类型的写入void duqu(); //设备类型的读取2.设备类:nfom* write() //设备的创建写入(见图3)Infom* load() //从文档中读取数据(见图4)void acquire(Infom* head) //分类查询数据(见图5)void acquire2(Infom* head) //查询全部数据(见图5)void acqu(char choose) //分类查询的内容支持(见图5)void add() //添加新内容(见图6)void undo(Infom* head) //删除(见图7)int save(Infom* head) //将现数据进行保存void revise(Infom* head) //修改数据void classify(Infom* head) //对数据的分类统计(见图8)void clasK(Infom* head) //类型的分类统计(见图8)void clasP(Infom* head) //价格的分类统计(见图8)void clasE(Infom* head) //是否报废的统计(见图8)3.管理员类:void create() //创建用户名和密码int log() //登陆void change() //修改用户名和密码2.2 运行界面设计运行界面由菜单类实现;菜单类:1.int menu1(device *p,struct ShiyanEquip *head,DeviceTipe *a,manager *b) //管理模式主菜单2.int menu2(device *p,struct ShiyanEquip *head,DeviceTipe *a) //游客模式主菜单3.struct ShiyanEquip * entering(device *p)//管理模式录入菜单4.struct ShiyanEquip *entering2(device *p)//游客模式录入菜单5.struct ShiyanEquip * change(device *p)//修改菜单6.struct ShiyanEquip * query(device *p)//查询菜单7.struct ShiyanEquip * statistic(device *p)//分类统计菜单8.struct ShiyanEquip * account(manager *b)//账号菜单9.struct ShiyanEquip * type(DeviceTipe *a)//设备类型菜单三、详细设计3.1系统设计与实现接口设计:1.int menu1(device *p,struct ShiyanEquip *head,DeviceTipe *a,manager *b)[功能] 调用管理模式主菜单并指向管理模式各项分菜单2.int menu2(device *p,struct ShiyanEquip *head,DeviceTipe *a)[功能] 调用游客模式主菜单并指向游客模式各项分菜单3.struct ShiyanEquip * entering(device *p) [功能] 指向设备类中的新建,载入和添加函数并完成相应函数功能4.struct ShiyanEquip *entering2(device *p) [功能] 指向设备类中的载入函数并完成函数功能5.struct ShiyanEquip * change(device *p) [功能] 指向设备类中的修改和删除函数并完成相应函数功能6.struct ShiyanEquip * query(device *p) [功能] 指向设备类中的分类查询和全部查询函数并完成相应函数功能7.struct ShiyanEquip * statistic(device*p)[功能] 指向设备类中的分类统计函数并完成相应三类的统计8.struct ShiyanEquip * account(manager *b)[功能] 指向管理员类中的修改函数完成修改账户及密码的功能9.struct ShiyanEquip * type(DeviceTipe *a)[功能] 指向设备类型类中的各个函数并完成有关设备类型的全部功能3.2模块设计设备类型类:设备类:四、测试分析【测试中发现的问题及解决方案】1.缺少必要的文字描述(已解决)2.输出的格式问题(已解决)3.不能删除唯一一项数据的问题(已解决)4.设备操作中缺失最后一行的问题(已解决)5.不能返回上一级菜单的问题(已解决)6.价格统计时不能确定准确比较的问题(已解决)【对最终成果的评价】整体来说比较满意,是最近辛苦努力的伟大成果,但是有如下几点有待改进1.可以进行汉字输入但是不能进行汉字查询的问题2.管理员账号不能随意登出的问题3.设备类中没有使用private导致保密性不强的问题五、源程序#include<iostream>#include<fstream>#include<conio.h>#include<stdio.h>#include<iomanip>#include<windows.h>using namespace std;class DeviceTipe //定义设备类型类{private:char sblx[20][20]; //设备类型public:void shuru(); //设备类型的输入void tianjia(); //设备类型的添加void shanchu(); //设备类型的删除void show(); //设备类型的输出显示void xieru(); //设备类型的写入void duqu(); //设备类型的读取};//=================================== ===========================//=================================== ===========================class device //定义设备类{public:typedef struct infom{char idnum[10]; //编号char kind[10]; //类型char name[10]; //名称char price[10]; //价格char purda[10]; //购买日期char exist[10]; //是否报废char damda[10]; //报废日期struct infom *next;}Infom;Infom* head;DeviceTipe wcs;Infom* write() //设备的创建写入{fstream the("aaa.txt",ios::out|ios::app); Infom *p1,*p2;head=NULL;wcs.duqu();wcs.show();p1=p2=(Infom *)malloc(sizeof(Infom));cout<<"请输入编号种类名称价格购买日期是否报废报废日期(空格键断开/按0键结束输入):"<<endl;cin>>p1->idnum>>p1->kind>>p1->name>>p1->price>>p1->purda>>p1->exist>>p1->damda;the<<p1->idnum<<' '<<p1->kind<<' '<<p1->name<<' '<<p1->price<<' '<<p1->purda<<' '<<p1->exist<<' '<<p1->damda<<endl;p1->next=NULL;while(1){if(head==NULL)head=p1;if(head!=NULL)p2->next=p1;p2=p1;p1=(Infom *)malloc(sizeof(Infom)); cin>>p1->idnum;if(*(p1->idnum)=='0'){free(p1);break;}cin>>p1->kind>>p1->name>>p1->price>>p1->purda>>p1->exist>>p1->damda;the<<p1->idnum<<' '<<p1->kind<<' '<<p1->name<<' '<<p1->price<<' '<<p1->purda<<' '<<p1->exist<<' '<<p1->damda<<endl;}p2->next=NULL;the.close();cout<<"写入成功"<<endl;load();return head;}//=================================== ===========================Infom* load() //从文档中读取数据{int n,a;char tran[7][80];int b;Infom *p1,*p2;fstream t("aaa.txt");head=NULL;p1=p2=(Infom*)malloc(sizeof(Infom));if(t.getline(tran[0],80,'\n')==NULL) {cout<<"载入失败"<<endl;return 0;}for(n=0,a=0;tran[0][n]!=' ';n++){p1->idnum[a]=tran[0][n];a++;}p1->idnum[a]='\0';for(a=0,n=n+1;tran[0][n]!=' ';n++) {p1->kind[a]=tran[0][n];a++;}p1->kind[a]='\0';for(a=0,n=n+1;tran[0][n]!=' ';n++) {p1->name[a]=tran[0][n];a++;}p1->name[a]='\0';for(a=0,n=n+1;tran[0][n]!=' ';n++) {p1->price[a]=tran[0][n];a++;}p1->price[a]='\0';for(a=0,n=n+1;tran[0][n]!=' ';n++) {p1->purda[a]=tran[0][n];a++;}p1->purda[a]='\0';for(a=0,n=n+1;tran[0][n]!=' ';n++) {p1->exist[a]=tran[0][n];a++;}p1->exist[a]='\0';for(a=0,n=n+1;tran[0][n]!='\0';n++) {p1->damda[a]=tran[0][n];a++;}p1->damda[a]='\0';p1->next=NULL;for(b=1;t.getline(tran[b],80,'\n')!=NULL;b++) {if(head==NULL)head=p1;elsep2->next=p1;p2=p1;p1=(Infom*)malloc(sizeof(Infom));for(n=0,a=0;tran[b][n]!=' ';n++){p1->idnum[a]=tran[b][n];a++;}p1->idnum[a]='\0';for(a=0,n=n+1;tran[b][n]!=' ';n++){p1->kind[a]=tran[b][n];a++;}p1->kind[a]='\0';for(a=0,n=n+1;tran[b][n]!=' ';n++) {p1->name[a]=tran[b][n];a++;}p1->name[a]='\0';for(a=0,n=n+1;tran[b][n]!=' ';n++) { p1->price[a]=tran[b][n];a++;}p1->price[a]='\0';for(a=0,n=n+1;tran[b][n]!=' ';n++) {p1->purda[a]=tran[b][n];a++;}p1->purda[a]='\0';for(a=0,n=n+1;tran[b][n]!=' ';n++){p1->exist[a]=tran[b][n];a++;}p1->exist[a]='\0';for(a=0,n=n+1;tran[b][n]!='\0';n++){p1->damda[a]=tran[b][n];a++;}p1->damda[a]='\0';}p2->next=p1;p1->next=NULL;if(b==1)head=p1;cout<<"载入成功"<<endl;return head;}//=================================== ===========================void acquire(Infom* head) //分类查询数据{char choose;cout<<"请选择查询方式:"<<endl; cout<<"1. 编号"<<endl; cout<<"2. 名称"<<endl; cout<<"3. 类型"<<endl; cout<<"4. 价格"<<endl; cout<<"5. 购买日期"<<endl; cout<<"6. 是否报废"<<endl; cout<<"7. 报废日期"<<endl; cout<<"0. 结束查询"<<endl;choose=getch();switch(choose){case '1':acqu(choose);break;case '2':acqu(choose);break;case '3':acqu(choose);break;case '4':acqu(choose);break;case '5':acqu(choose);break;case '6':acqu(choose);break;case '7':acqu(choose);break;case '0':break;}}void acquire2(Infom* head) //查询全部数据{Infom* t=head;if(t==NULL)cout<<"对不起,信息不存在"<<endl;else{cout<<" 编号种类名称价格购买日期是否报废报废日期"<<endl;for(;t->next!=NULL;){cout<<setfill('')<<setw(10)<<t->idnum<<' '<<setfill('')<<setw(10)<<t->kind<<' '<<setfill('')<<setw(10)<<t->name<<' '<<setfill(' ')<<setw(10)<<t->price<<' '<<setfill(' ')<<setw(10)<<t->purda<<' '<<setfill(' ')<<setw(10)<<t->exist<<' '<<setfill(' ')<<setw(10)<<t->damda<<endl;t=t->next;}cout<<setfill('')<<setw(10)<<t->idnum<<' '<<setfill('')<<setw(10)<<t->kind<<' '<<setfill('')<<setw(10)<<t->name<<' '<<setfill('')<<setw(10)<<t->price<<' '<<setfill('')<<setw(10)<<t->purda<<' '<<setfill('')<<setw(10)<<t->exist<<' '<<setfill('')<<setw(10)<<t->damda<<endl;}}void acqu(char choose) //分类查询的内容支持{Infom* t=head;char *s;int a=0;char xyz[10];cout<<"请输入查询内容:";cin>>xyz;for(;t->next!=NULL;){switch(choose){case'1':s=t->idnum;break;case'2':s=t->name;break;case'3':s=t->kind;break;case'4':s=t->price;break;c ase'5':s=t->purda;break;case'6':s=t->exist;break;c ase'7':s=t->damda;break;}if(strcmp(s,xyz)==0){if(a==0)cout<<" 编号种类名称价格购买日期是否报废报废日期"<<endl;cout<<setfill('')<<setw(10)<<t->idnum<<' '<<setfill('')<<setw(10)<<t->kind<<' '<<setfill('')<<setw(10)<<t->name<<' '<<setfill('')<<setw(10)<<t->price<<' '<<setfill('')<<setw(10)<<t->purda<<' '<<setfill('')<<setw(10)<<t->exist<<' '<<setfill('')<<setw(10)<<t->damda<<endl;a++;}t=t->next;}switch(choose){case'1':s=t->idnum;break;case'2':s=t->name;break;case'3':s=t->kind;break;case'4':s=t->price;break;case'5':s=t->purda;break;c ase'6':s=t->exist;break;c ase'7':s=t->damda;break;}if(strcmp(s,xyz)==0){if(a==0)cout<<" 编号种类名称价格购买日期是否报废报废日期"<<endl;cout<<setfill('')<<setw(10)<<t->idnum<<' '<<setfill('')<<setw(10)<<t->kind<<' '<<setfill('')<<setw(10)<<t->name<<' '<<setfill('')<<setw(10)<<t->price<<' '<<setfill('')<<setw(10)<<t->purda<<' '<<setfill('')<<setw(10)<<t->exist<<' '<<setfill('')<<setw(10)<<t->damda<<endl;a++;}if(a==0)cout<<"对不起,您查询的信息不存在"<<endl;}//=================================== ===========================void add() //添加新内容{fstream the("aaa.txt",ios::out|ios::app);Infom *p1,*p2;head=NULL;wcs.duqu();wcs.show();p1=p2=(Infom *)malloc(sizeof(Infom));cout<<"请输入编号种类名称价格购买日期是否报废报废日期(空格键断开/按0键结束输入):"<<endl;cin>>p1->idnum>>p1->kind>>p1->name>>p1->price>>p1->purda>>p1->exist>>p1->damda;the<<p1->idnum<<' '<<p1->kind<<' '<<p1->name<<' '<<p1->price<<' '<<p1->purda<<' '<<p1->exist<<' '<<p1->damda<<endl;p1->next=NULL;while(1){if(head==NULL)head=p1;if(head!=NULL)p2->next=p1;p2=p1;p1=(Infom *)malloc(sizeof(Infom)); cin>>p1->idnum;if(*(p1->idnum)=='0'){free(p1);break;}cin>>p1->kind>>p1->name>>p1->price>>p1->purda>>p1->exist>>p1->damda;the<<p1->idnum<<' '<<p1->kind<<' '<<p1->name<<' '<<p1->price<<' '<<p1->purda<<' '<<p1->exist<<' '<<p1->damda<<endl;}p2->next=NULL;the.close();cout<<"添加成功"<<endl;load();}//=================================== ===========================void undo(Infom* head) //删除{struct infom *p1,*p2;char num[10];char aaa[10]="0";char choose;wcs.duqu();wcs.show();cout<<"请输入要删除的编号(空格键断开\按0键结束):"<<endl;while(1){cin>>num;if(strcmp(num,aaa)==0)break;if(head==NULL)cout<<"您使用的地址不存在"<<endl;else{p1=head;for(;strcmp(p1->idnum,num)!=0&&p1->next !=NULL;){p2=p1;p1=p1->next;}if(strcmp(p1->idnum,num)==0){if(p1==head){head=p1->next;free(p1);}else{p2->next=p1->next;p1->next=NULL;free(p1);}}elseif(strcmp(p1->idnum,num)!=0&&p1->next== NULL)cout<<"该内容不存在"<<endl;}}cout<<"输入'1'储存,输入'0'放弃"<<endl;choose=getch();switch(choose){case '1':save(head);break;case '0':break;}if(choose=='1'){cout<<"删除成功"<<endl;load();}}//=================================== ===========================int save(Infom* head) //将现数据进行保存{unlink("aaa.txt");fstream The("aaa.txt",ios::out|ios::app);Infom *p1;p1=head;if(p1==NULL)return 0;for(;p1->next!=NULL;){The<<p1->idnum<<' '<<p1->kind<<' '<<p1->name<<' '<<p1->price<<' '<<p1->purda<<' '<<p1->exist<<' '<<p1->damda<<endl;p1=p1->next;}The<<p1->idnum<<' '<<p1->kind<<' '<<p1->name<<' '<<p1->price<<' '<<p1->purda<<' '<<p1->exist<<' '<<p1->damda<<endl; The.close();return 0;}//=================================== ===========================void revise(Infom* head) //修改数据{char num[10];Infom *p1;char choose;char x;wcs.duqu();wcs.show();cout<<"请输入更改项目的编号:"<<endl;cin>>num;p1=head;for(;strcmp(p1->idnum,num)!=0&&p1->next !=NULL;){p1=p1->next;}if(p1->next==NULL&&strcmp(p1->idnum,num)!=0)cout<<"不存在此编号"<<endl;else{cout<<"请选择修改内容:"<<endl;cout<<"1. 编号"<<endl;cout<<"2. 名称"<<endl;cout<<"3. 类型"<<endl;cout<<"4. 价格"<<endl;c out<<"5. 购买日期"<<endl;c out<<"6. 是否报废"<<endl;c out<<"7. 报废日期"<<endl;c out<<"0. 结束修改"<<endl;choose=getch();cout<<"请输入修改内容:"<<endl;switch(choose){case '1':cin>>p1->idnum;break;case '2':cin>>p1->name;break;case '3':cin>>p1->kind;break;case '4':cin>>p1->price;break;case '5':cin>>p1->purda;break;case '6':cin>>p1->exist;break;case '7':cin>>p1->damda;break;case '0':break;}}cout<<"输入'1'储存,输入'0'放弃"<<endl;x=getch();switch(x){case '1':save(head);break;case '0':break;}}//=================================== ===========================void classify(Infom* head) //对数据的分类统计{char choose;cout<<"请选择统计内容:"<<endl;cout<<"1. 类型"<<endl;cout<<"2. 价格"<<endl;cout<<"3. 是否报废"<<endl; cout<<"0. 结束统计"<<endl;choose=getch();switch(choose){case '1':clasK(head) ;break;case '2':clasP(head) ;break;case '3':clasE(head) ;break;case '0':break;}}void clasK(Infom* head) //类型的分类统计{char a[20][10];int b[20]={1};int x;int y;int i;Infom *p1;p1=head;for(x=0,strcpy(a[0],p1->kind);p1->next!=NUL L;){p1=p1->next;for(y=0;y<=x;y++){if(strcmp(p1->kind,a[y])==0){b[y]++;break;}}if(y==x+1){x++;b[x]++;strcpy(a[x],p1->kind);}for(i=0;i<=x;i++){cout<<"类型:"<<a[i]<<' '<<"数量:"<<b[i]<<endl;}}void clasP(Infom* head) //价格的分类统计{int b[3]={0};int x;int y;int i;char trans[10];char de[10]="000005000";char deg[10]="000010000";Infom *p1;p1=head;for(;p1->next!=NULL;){x=strlen(p1->price);for(i=0,y=0;i<9;i++){if(i>=(9-x)){trans[i]=p1->price[y];y++;}elsetrans[i]='0';}if(strcmp(trans,de)<=0)b[0]++;if(strcmp(trans,de)>0&&strcmp(p1->price,de g)<0)b[1]++;if(strcmp(trans,deg)>=0)b[2]++;p1=p1->next;}x=strlen(p1->price);for(i=0,y=0;i<9;i++){if(i>=(9-x)){trans[i]=p1->price[y];y++;}elsetrans[i]='0';}if(strcmp(trans,de)<=0)b[0]++;if(strcmp(trans,de)>0&&strcmp(trans,deg)<0 )b[1]++;if(strcmp(trans,deg)>=0)b[2]++;p1=p1->next;cout<<"价格小于等于5000:" <<' '<<"数量:"<<b[0]<<endl;cout<<"价格大于5000小于10000:"<<' '<<"数量:"<<b[1]<<endl;cout<<"价格大于等于10000:" <<' '<<"数量:"<<b[2]<<endl;}void clasE(Infom* head) //是否报废的统计{char a[20][10];int b[20]={1};int x;int y;int i;Infom *p1;p1=head;for(x=0,strcpy(a[0],p1->exist);p1->next!=NUL L;){p1=p1->next;for(y=0;y<=x;y++){if(strcmp(p1->exist,a[y])==0){b[y]++;break;}}if(y==x+1){x++;b[x]++;strcpy(a[x],p1->exist);}}for(i=0;i<=x;i++){cout<<"是否报废:"<<a[i]<<' '<<"数量:"<<b[i]<<endl;}}};//==============================================================//=================================== ===========================int i,n=0; //设备类型类的函数实现部分void DeviceTipe::xieru(){ofstream fout("sblx.txt");char (*p)[20];p=sblx;for(i=0;i<n;i++){fout<<*(p+i)<<endl;}fout<<flush;fout.close();}//=================================== ===========================void DeviceTipe::duqu(){ifstream file;file.open("sblx.txt");char (*p)[20];p=sblx;i=0;do{file>>*(p+i);i++;}while(p[i][0]!='\0');for(i=0;p[i][0]!='\0';i++);n=i;file.close();}//=================================== ===========================void DeviceTipe::shuru(){char (*p)[20];p=sblx;system("cls");cout<<"请输入设备类型个数:"<<endl; cin>>n;cout<<"请依次输入设备类型名称"<<endl;for(i=0;i<n;i++){cin>>*(p+i);}}//=================================== ===========================void DeviceTipe::tianjia(){char (*p)[20];p=sblx;int k;system("cls");cout<<"请输入要添加的设备类型个数"<<endl;cin>>k;cout<<"请依次输入设备类型名称"<<endl; for(i=n;i<n+k;i++){cin>>*(p+i);}n=n+k;}//=================================== ===========================void DeviceTipe::shanchu(){char (*p)[20];char w[20];p=sblx;int x=0;int j;int r;cout<<"请输入要删除的设备类型"<<endl; cin>>w;for(i=0;i<n;i++){if(strcmp(w,*(p+i))==0)for(j=i;j<n;j++){strcpy(*(p+j),*(p+j+1));x=1;。

相关主题