当前位置:文档之家› 有代码 信管一班 蓝俊杰 单位仪器设备基本信息管理软件设计

有代码 信管一班 蓝俊杰 单位仪器设备基本信息管理软件设计

课程设计课程名称程序设计课程设计班级与班级代码2011级信息管理1班专业信息管理指导教师:***学号:************名:***提交日期:2012 年 6 月23 日广东商学院教务处制姓名蓝俊杰课程设计成绩评语:指导教师(签名)年月日说明:指导教师评分后,课程设计交院(系)办公室保存。

课程设计报告正文的内容及排版要求标题:单位仪器设备基本信息管理软件设计1 系统功能要求:(一级标题:黑体、四号)内容:单位仪器设备基本信息管理软件设计:采用结构体数组或文件形式存储每种设备的信息,每个仪器设备应包含如下几方面的信息:设备编号、设备名称、设备单价、购进年代、生产厂家、该设备数量、可用性。

软件由主函数(含欢迎界面)+下列5个功能模块组成:(1)购进功能(被购进设备数量增x);(2)显示已有设备;(3)报废功能(对“可用性”信息为“否”的设备报废,被报废设备数减x);(3)查找功能(需指定设备号或设备名);(5)统计功能(统计每种设备可用数、不可用数);(6)退出程序的运行。

2 系统总体设计思想(1)开发与设计的总体思想内容示例:单位仪器设备基本信息管理软件算法说明:STEP1 预处理,定义结构体STEP2 进入欢迎界面STEP3 选择某一种功能STEP4 根据提示输入一个数字STEP5 对于输入的数字编辑关于购进、报废、查找、统计功能的函数STEP6 如果输入的字母表示退出,退出系统(2)系体模块结构图3 系统详细设计思想(1)函数的描述内容包括:分模块(函数)简述其功能;函数中使用的各变量的类型及作用等(可参考材P155的写法)。

1.显示所有设备信息函数函数原型:void show (void)功能:显示内存里的记录信息参数:void返回值:void工作方式:从头部开始逐个显示记录内容。

要求:报告是否有记录及记录条数和内容。

2.购进设备函数函数原型:void addfacility (void)功能:增加记录参数:void返回值:void工作方式:从尾部开始逐个追加记录。

要求:将新记录追加在记录尾部,并对记录进行计数。

3.显示所有设备信息函数函数原型:void showTable(void)功能:输出表头信息参数:void返回值:void工作方式:输出一行表头信息。

要求:输出一行表头信息。

4.报废设备函数函数原型:void removefacility (void)功能:把所选的仪器报废,被报废设备数减x。

参数:void返回值:void工作方式:根据给定的关键字,查找符合的记录并将报废的设备删除。

要求:将报废的设备数减去。

5.显示所有设备信息函数函数原型:int findRecord(char* target, int targetType, int from)功能:查找指定的记录参数:char* target:欲查找记录的某一项与target相同返回值:int targetType:表明通过哪项来查找,0为编号,1为名称。

int from:从第from个记录开始找。

工作方式:根据给定的关键字,查找符合记录的序号。

要求:找不到则返回-1.6.查询指定设备的信息函数函数原型:void seekfacility (void)功能:查询指定设备的信息参数:void返回值:void工作方式:可以按照编号、名称来查询要求:打印查询到的设备的信息7.修改设备信息函数原型:void modifyfacility (void)功能:修改指定设备的信息参数:void返回值:void工作方式:修改设备的信息要求:报告是否有记录及记录条数和内容8、文件存储操作函数函数原型:int saveRecords (void)功能:把信息存储进指定文件中参数:int返回值:void工作方式:输入文件名字并保存要求:有空间存储9、文件读取操作函数函数原型:int loadRecords (void)功能:从指定文件中读取出的记录参数:int返回值:void工作方式:输入已经存在的文件名字来读取文件中的信息要求:已经存在文件可供读取10.主函数函数原型:int main()功能:控制程序参数:void返回值:void要求:管理菜单命令并完成初始化11.菜单处理函数函数原型:void select(void)功能:处理选择的菜单命令参数:void返回值:void工作方式:根据命令,调用相应函数要求:给出结束信息12.菜单选择函数函数原型:int menu_select( )功能:接收用户选择的命令代码参数:void返回值:int工作方式:返回命令代码的整数值要求:只允许选择规定键,如果输入不合要求,则提醒用户重新输入13.结束程序运行函数函数原型:void quit(void)功能:结束程序运行参数:void返回值:void工作方式:根据要求决定在退出前是否将修改的记录存入文件要求:结束运行之前,询问是否对修改的记录进行存储14.头文件函数原型:device.h功能:声明函数原型,包含文件及自定义宏和数据结构参数:void返回值:void要求:报告是否能正常打开文件执行存入操作及存入记录的条数15、文件(2)主要函数流程图1.void addfacility(void)2. void select(void)3. void show(void)4. int findRecord(char* target, int targetType, int from)5. void removfacility(void)6. void modifyfacility (void)调试结果:(1)欢迎界面:输入密码(2)功能选择菜单(3)购进新设备功能而在于设备数量大于100台和小于100台的处理上,大于100台则直接输入可用设备的数目,而对于小于100台,则逐台输入每台的可用性不可用性。

(4)显示已有设备(5)报废设备报废功能也可以按照名字和编号来报废,报废前还会打印出将要被报废的设备信息再一次询问操作者是否要删除该设备。

(6)查找设备按编号查找按设备名称查找(7)保存设备信息(8)读取设备信息本人在程序设计中感想本人在程序设计的课程设计中感受到:很多的函数设计与学生管理系统还是有挺大的差别的。

通过设置密码可改变背景和字体颜色的设计,让我懂得了 C语言还是有很多我没有了解到的地方,通过互联网上的资源我们可以懂得的更多。

而遇到不懂的地方就要耐心的读懂,实在不懂的就要谦虚地问同学和老师,例如在程序设计过程中scanf语句与getchar()语句混搭容易出现跳句,需要不断的修改来完善。

将保存文件语句和读取文件语句穿插也需要注意,当记录为0时直接调用saveRecord()语句是保存不了的,所以需要再修改。

通过实验让我更加深刻学习到了C语言的好处。

5 结束语C语言的程序设计实验的成功实验,靠得不仅仅是自己的努力,还有同学的帮助,当然最重要的还是老师的耐心解答。

参考文献[1] 谭浩强,C程序设计(第二版),北京:清华大学出版社,2001.1(左对齐,宋体,五号)[2] 陈朔鹰,C语言程序设计习题集,北京:人民邮电出版社,2003.6facility.h#ifndef H_STUDENT_HH //如果没有定义H_STUDENT_HH,继续执行#define H_STUDENT_HH//定义H_STUDENT_HH,可避免重复编绎#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <string.h>//头文件包含#define INITIAL_SIZE 5 // 数组初始大小#define INCR_SIZE 5 // 数组每次增加的大小//可根椐系统使用需要的常量定义struct facility_info {char number[20]; //设备编号char name[20]; //设备名称char manufactory[20]; //设备生产厂家char year[20]; //设备购进年代float getnumbers; //设备购进数目float usable; //可用设备float price; //设备单价};typedef struct facility_info SBInfo;//定义一个类型名SBInfo代表定义的结构体shebei_infoextern int numStus; // 记录的设备数extern SBInfo* records; // 记录设备信息的数组指针extern int arraySize; // 数组大小extern char savedTag;//共享的全局变量定义void select(void);int menu_select(void);void addfacility(void);void modifyfacility(void);void show(void);void seekfacility(void);void removefacility(void);void quit(void);void showTable(void);int findRecord(char* target, int targetType, int from);int getIndex(float sum);int saveRecords(void);int loadRecords(void);void copyRecord(SBInfo* hum, SBInfo* orc);//函数申明,注意()里必须包含对应函数形参类型#endif // H_STUDENT_HHfacility.c#include "facility.h"#include<conio.h>/*************************** 初始化**************************/int numStus = 0; // 记录的学生数SBInfo *records = NULL; // 记录学生信息的数组int arraySize; // 数组大小char ch1[15],ch2[15]={"JJ"};char savedTag = 0; // 信息是否已保存的标志,1为未保存,0为已保存/*************************** 主函数**************************/int main(){system("color 9");// 初始化数组records =(SBInfo*)malloc(sizeof(SBInfo)*INITIAL_SIZE);//给数组分配StuInfo分配INITIAL_SIZE个记录空间大小if (records == NULL){printf("memory fail!");exit(-1);//如果内存空间不够分配,退出程序}arraySize = INITIAL_SIZE;printf("************************************************************************* \n");printf(" * callmeJJ SINGLEJJ BIRTHDAY * \n");printf(" * lovelove ** handsome 19920929 * \n");printf("* ** **** ** *\n");printf("* ** *** ** *\n");printf("* ** QQ:496798140** ** *\n");printf("* ** 嘿我是蓝俊杰** ** *\n");printf("* ** QQ QQ QQ** ** ** ** *\n");printf("* 手机:150 QQ QQ QQ673798 673798 *\n");printf("* 15593798 QQ QQ QQ*** *** *\n");printf("** * \n");printf(" ** ** \n");printf(" ** 欢迎使用仪器设备基本信息管理程序 ** \n");printf(" ** ** \n");printf(" ** 设计者蓝俊杰1251101121 ** \n");printf(" ** ****** ** \n");printf(" ** ****** ** \n");printf(" ** *** ***** ** \n");printf(" ************************ * ************************* \n");printf(" *********************** ************************* \n");printf(" ****** \n");printf(" ****** \n");printf("\n");for(;;){printf("\n 进入系统的密码是:");gets(ch1);if(strcmp(ch1,ch2)==0)break;else printf("\n SORRY!密码错啦T_T!\n");}printf("\n\t\t欢迎使用设备管理系统!\t\n");select();}/*************************** 菜单处理函数**************************/void select(void){for ( ; ; ) {switch(menu_select()){case 1:addfacility();break;case 2:seekfacility();break;case 3:removefacility();break;case 4:modifyfacility();break;case 5:show();break;case 6:saveRecords();break;case 7:loadRecords();break;case 8:quit();}}}/**************************** * 菜单选择函数menu_select****************************/int menu_select( ){char s[2];int cn=0;printf("\n");printf ( "\t1. 购进设备\n" );printf ( "\t2. 查找设备\n" );printf ( "\t3. 报废设备\n" );printf ( "\t4. 修改设备信息\n" );printf ( "\t5. 显示设备信息\n" );printf ( "\t6. 保存设备信息\n" );printf ( "\t7. 读取设备信息\n" );printf ( "\t8. 退出程序\n" );printf ( "\n\t左边数字对应功能选择,请选1-8 :" );for(; ;){gets(s);cn = atoi (s);if(cn<1|| cn>8 ) printf("\n\t输入错误,重选1-8:");else break;}return cn;}/****************************************结束运行,退出**参数量void***************************************/void quit(void){char str[5];if (savedTag==1){printf("\n 是否保存记录?(Y/n)\n"); printf(" 选择: ");gets(str);if(str[0]!='n'&&str[0]!='N')saveRecords();}free(records);printf("\n ByeBye啦啦啦啦~ \n\n");exit(0);}facility_add_sum.c#include "facility.h"/********************* 打印表头********************/float getnumbers,usenumbers_1,usenumbers_2;float unusable,usable;void showTable(void){printf("\n\t编号\t名称\t厂家");printf("\t年代\t单价\t数量\t可用数\n");}/************************ 显示所有的设备信息***********************/void show(void){int i;if (numStus == 0){printf("\n 没有可供显示的记录!\n");return;}showTable();if(getnumbers<=100){for (i=0; i<numStus; i++){// 打印设备的信息printf("\t%s\t%s\t%s\t%s\t%.2f\t%.f\t%.f\n",recor ds[i].number,records[i].name,records[i].manufactory ,records[i].year,records[i].price,records[i].getnum bers,records[i].usable);}}else if(getnumbers>100){for (i=0; i<numStus; i++){// 打印设备的信息printf("\t%s\t%s\t%s\t%s\t%.2f\t%.f\t%.f\n",recor ds[i].number,records[i].name,records[i].manufactory ,records[i].year,records[i].price,records[i].getnum bers,records[i].usable);}}}/****************************** 在当前表的末尾增加新的信息* 结果:records中将记录新的信* 息,如果数组大小不够,会重* 新申请数组空间*****************************/void addfacility(void){char str[10];float unusable,usable;int j;float getnumbers,usenumbers_1;float price;if(numStus==0)printf("\n 原来没有记录,现在建立新表\n");elseprintf("\n 下面在当前表的末尾增加新的信息\n");while(1)//()中为1表示无条件反复循环{printf(" 您将要添加一组信息,确定吗?(Y/n)");gets(str);if (str[0]=='n' || str[0]=='N') // 不再添加新的信息break;if (numStus >= arraySize) // 现在的数组空间不足,需要重新申请空间{records =realloc(records,(arraySize+INCR_SIZE)*sizeof(SBInfo ));//新空间大小变为(arraySize+INCR_SIZE)记录大小,即在原来基础上增加INCR_SIZE个记录大小if (records == NULL){printf("memory failed!");exit(-1);}arraySize = arraySize+INCR_SIZE; //arraySize 修改为新空间可保存的记录数}printf("\n 请输入设备编号:");gets(records[numStus].number);printf(" 请输入设备名称:");gets(records[numStus].name);printf(" 请输入设备购进年代:");gets(records[numStus].year);printf(" 请输入设备生产厂家:");gets(records[numStus].manufactory);printf(" 请输入设备单价:");gets(str);price = (float)atof(str);records[numStus].price=price;printf(" 购进设备数量是否大于100台?(Y/N)");gets(str);if (str[0]=='y' || str[0]=='Y'){printf("\n 请输入购进设备数量:");gets(str);getnumbers = (float)atof(str);records[numStus].getnumbers=getnumbers;printf(" 可用设备的数量有:");gets(str);usenumbers_1= (float)atof(str);records[numStus].usable=usenumbers_1;}else if(str[0]=='n' || str[0]=='N'){printf(" 请输入购进设备数量:");gets(str);getnumbers = (float)atof(str);records[numStus].getnumbers=getnumbers;unusable=0 ;usable=0;for(j=1;j<=getnumbers;j++){ printf("第%d台设备的可用性为: (设备不可用请输入0,设备可用请输入1) : ",j);gets(str);if (str[0] == '0'){unusable=unusable+1;}else if(str[0]=='1'){usable=usable+1;}}records[numStus].usable=usable;unusable=0;usable=0;}numStus++; //输入一设备记录后,设备数加1 }printf("\n 现在一共有%d条设备信息\n",numStus);savedTag = 1;}facility_Modify_remove.c#include "facility.h"/************************************************** ************* 查找指定的记录* 参数:target:欲查找记录的某一项与target相同* targetType:表明通过哪一项来查找,0为设备编号,1为设备名称* from:从第from个记录开始找* 返回:找到的记录的序号,若找不到则返回-1*************************************************** ***********/int findRecord(char* target, int targetType, int from) {int i;for(i=from;i<numStus;i++){if((targetType==0&&strcmp(target,records[i].number) ==0)||(targetType==1&&strcmp(target,records[i].name)==0)) return i;// 如果找到符合条件的记录,返回记录号i}return -1;//如果没有找到,返回-1}/********************************* 查询指定设备的信息* 可以按照设备编号或名称来查询********************************/void seekfacility(void){char str[5];char target[20];int type;int count;int i;if(numStus==0){printf("\n 没有可供查询的记录\n");return;}while(1) {printf("\n 请输入查询的方式:(直接输入回车键则结束查询)\n");printf(" 1. 按设备编号查找\n");printf(" 2. 按设备名称查找\n");printf("\n 选择:");gets(str);if (str[0] == '1'){printf("\n 请输入欲查找的设备编号:");gets(target);type = 0;} else if (str[0] == '2'){printf(" 请输入欲查找的设备名称:");gets(target);type = 1;}else break;i = findRecord(target,type,0);//,从0号记录起查找,查询项type,查询目标数据项targetif(i>=0){// 打印查询到的设备的信息showTable();}count = 0;while(i != -1){count++;//查询到的设备数加1printf("\t%s\t%s\t%s\t%s\t%.2f\t%.f\t%.f\n",recor ds[i].number,records[i].name,records[i].manufactory ,records[i].year,records[i].price,records[i].getnum bers,records[i].usable);//输出i记录的各个数据项i = findRecord(target,type,i+1);//从i+1条记录起查找下一条符合条件的记录}if (count==0) printf("\n 没有符合条件的设备!\n");else printf("\n 一共找到了%d种设备的信息\n\n",count);}}/************************* 删除指定的记录************************/void removefacility(void){char str[5];char target[20];int type;int i,j;if(numStus==0){printf("\n 没有可供删除的记录\n");return;}while(1) {printf("\n 请输入如何找到欲报废的设备:(直接输入回车键则结束移除操作)\n");printf(" 1. 按设备编号\n");printf(" 2. 按设备名称\n");printf("\n 选择:");gets(str);if (str[0] == '1'){printf("\n 请输入该设备的编号:");gets(target);type = 0;} else if (str[0] == '2'){printf(" 请输入该设备的名称:");gets(target);type = 1;}else break;i = findRecord(target,type,0);if (i==-1) printf("\n 没有符合条件的设备!\n");while(i != -1){showTable();printf("\t%s\t%s\t%s\t%s\t%.2f\t%.f\t%.f\n",recor ds[i].number,records[i].name,records[i].manufactory ,records[i].year,records[i].price,records[i].getnum bers,records[i].usable);printf("\n 真的要删除该设备吗?(y/N)");gets(str);if(str[0]=='Y'||str[0]=='y'){numStus--;for (j=1;j<numStus;j++){copyRecord(&records[j+1],&records[j]);}}i=findRecord(target,type,i+1);}}savedTag = 1;//删除一条记录后,保存标志变为1,表示未保存}/****************************************** 将src指向的一条记录复制给dest指向的记录*****************************************/void copyRecord(SBInfo* hum, SBInfo* orc){strcpy(orc->number,hum->number);strcpy(orc->name,hum->name);strcpy(orc->year,hum->year);strcpy(orc->manufactory,hum->manufactory);orc->price = hum->price;orc->usable = hum->usable;orc->getnumbers = hum->getnumbers;/************************** 修改指定设备的信息*************************/void modifyfacility(void){char str[5];char target[20];int type;int i,j;floatgetnumbers,usenumbers_1,usenumbers_2,usable,unusabl e;float price;int count = 0;if(numStus==0){printf("\n 没有可供修改的记录\n");return;}while(1) {printf("\n 请输入想要修改的设备记录的方式:(直接输入回车键则结束移除操作)\n");printf(" 1. 按设备编号\n");printf(" 2. 按设备名称\n");printf("\n 选择:");gets(str);if (str[0] == '1'){printf("\n 请输入该设备的编号:");gets(target);type = 0;} else if (str[0] == '2'){printf(" 请输入该设备的名称:");gets(target);type = 1;} else break;i=findRecord(target,type,0);if (i==-1) printf("\n 没有符合条件的设备!\n");while(i != -1){showTable();printf("\t%s\t%s\t%s\t%s\t%.2f\t%.f\t%.f\t%.f\n", records[i].number,records[i].name,records[i].manufa ctory,records[i].year,records[i].price,records[i].g etnumbers,records[i].usable);printf("\n 确定要修改该设备的信息吗?(Y/N)");gets(str);if (str[0]=='y' || str[0]=='Y'){printf("\n 下面请重新输入该设备的信息:\n");printf("\n 请输入设备编号:");gets(records[i].number);printf(" 请输入设备名称:");gets(records[i].name);printf(" 请输入设备购进年代:");gets(records[i].year);printf(" 请输入设备生产厂家:");gets(records[i].manufactory);printf(" 请输入设备单价:"); gets(str);price = (float)atof(str);records[i].price=price;printf("购进设备数量是否大于100台?(Y/N)\n");gets(str);if (str[0]=='y' || str[0]=='Y'){printf(" 请输入购进设备数量:");gets(str);getnumbers = (float)atof(str);records[i].getnumbers=getnumbers;printf(" 可用设备的数量有:");gets(str);usenumbers_1= (float)atof(str);records[i].usable=usenumbers_1;printf(" 不可用设备的数量有:");gets(str);usenumbers_2= (float)atof(str);}else if(str[0]=='n' || str[0]=='N'){printf(" 请输入购进设备数量:");gets(str);getnumbers = (float)atof(str);records[i].getnumbers=getnumbers;unusable=0;usable=0;for(j=1;j<=getnumbers;j++){ printf("第%d台设备的可用性为:“0”设备不可用,“1”设备可用: ",j);gets(str);if (str[0] == '0'){unusable=unusable+1;}else if(str[0]=='1'){usable=usable+1;}}records[i].usable=usable;unusable=0;usable=0;}i=findRecord(target,type,i+1); }else break;}}savedTag = 1;}。

相关主题