程序设计课程设计论文_第1页
程序设计课程设计论文_第2页
程序设计课程设计论文_第3页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、r东商学院GUANGDONG UNIVERS TY OF BUSINESS STUDIES课程设计课程名称程序设计课程设计班级与班级代码2011级信息管理1班专 业信息管理指导教师:胡玉平学号:11251101121姓名:蓝俊杰提交日期:2012 年6 月 23 日广东商学院教务处制姓名蓝俊杰课程设计成绩 评语:评价内容不及格及格中良优表达精练,格式准确,基本无错别子内容完整,思路清晰,结构严谨,设计科学,可操作性强程序能完成课程设计任务书所规定的任务,功能完善, 独立分析和解决问题能力较好。代码简洁,算法清晰,可读性强无抄袭现象且课程设计报告体会深刻指导教师(签名)年 月 日说明:指导教师评

2、分后,课程设计交院(系)办公室保存。课程设计报告正文的内容及排版要求标题:单位仪器设备基本信息管理软件设计1系统功能要求:(一级标题:黑体、四号)内容:单位仪器设备基本信息管理软件设计:采用结构体数组或文 件形式存储每种设备的信息,每个仪器设备应包含如下几方面的信 息:设备编号、设备名称、设备单价、购进年代、生产厂家、该设备 数量、可用性。软件由主函数(含欢迎界面)+下列 5个功能模块组 成:(1)购进功能(被购进设备数量增 x); (2)显示已有设备;(3) 报废功能(对“可用性”信息为“否”的设备报废,被报废设备数减 x); (3)查找功能(需指定设备号或设备名);(5)统计功能(统计 每

3、种设备可用数、不可用数);(6)退出程序的运行。2系统总体设计思想(1)开发与设计的总体思想内容示例:单位仪器设备基本信息管理软件算法说明:STEP1预处理,定义结构体STEP2进入欢迎界面STEP3选择某一种功能STEP4根据提示输入一个数字STEP5对于输入的数字编辑关于购进、报废、查找、统计功能 的函数STEP6如果输入的字母表示退出,退出系统 (2)系体模块结构图 内容示例:facility.cmai n总控函数select菜单选择menu select菜单处理quit结束运行Facility_add_sum.cshowTable打印表头show显示所有的设备信息addfacility

4、在表尾追加信息facility_Modify_remove.cfindRecord查找到指定的信息seekfacility查询指定设备的信息removefacility报废设备modifyfacility修改设备facility.h常数提供常数结构声明设备结构库函数及函数原型声 明引用库函数及函数facility_save_load.csaveRecords存储信息loadRecords读取信息3系统详细设计思想(1)函数的描述内容包括:分模块(函数)简述其功能;函数中使用的各变量的 类型及作用等(可参考材 P155的写法)。1. 显示所有设备信息函数函数原型:void show (void)

5、功能:显示内存里的记录信息参数:void返回值:void工作方式:从头部开始逐个显示记录内容。要求:报告是否有记录及记录条数和内容。2. 购进设备函数函数原型:void addfacility (void)功能:增加记录参数:void返回值:void工作方式:从尾部开始逐个追加记录。 要求:将新记录追加在记录尾部,并对记录进行计数。3显示所有设备信息函数 函数原型: void showTable(void) 功能:输出表头信息 参数: void 返回值: void 工作方式:输出一行表头信息。 要求:输出一行表头信息。4报废设备函数 函数原型: void removefacility (voi

6、d) 功能:把所选的仪器报废,被报废设备数减x。参数: void 返回值: void 工作方式:根据给定的关键字,查找符合的记录并将报废的设 备删除。要求:将报废的设备数减去。 5显示所有设备信息函数函数原型:int findRecord(char* target, int targetType, int from)功能:查找指定的记录参数: char* target :欲查找记录的某一项与 target 相同返回值: int targetType :表明通过哪项来查找, 0为编号, 1 为名称。int from :从第 from 个记录开始找。 工作方式:根据给定的关键字,查找符合记录的序号

7、。 要求:找不到则返回 1.6查询指定设备的信息函数 函数原型: void seekfacility (void) 功能:查询指定设备的信息 参数: void 返回值: void工作方式:可以按照编号、名称来查询 要求: 打印查询到的设备的信息7修改设备信息函数原型: void modifyfacility (void) 功能:修改指定设备的信息 参数: void 返回值: void 工作方式:修改设备的信息 要求:报告是否有记录及记录条数和内容8 、文件存储操作函数 函数原型: int saveRecords (void) 功能:把信息存储进指定文件中 参数: int 返回值: void 工

8、作方式:输入文件名字并保存 要求:有空间存储9 、文件读取操作函数函数原型: int loadRecords (void) 功能: 从指定文件中读取出的记录 参数: int 返回值: void 工作方式:输入已经存在的文件名字来读取文件中的信息 要求:已经存在文件可供读取10主函数函数原型: int main() 功能:控制程序 参数: void 返回值: void 要求:管理菜单命令并完成初始化11菜单处理函数 函数原型: void select(void) 功能:处理选择的菜单命令 参数: void 返回值: void 工作方式:根据命令,调用相应函数要求:给出结束信息12菜单选择函数 函

9、数原型: int menu_select( ) 功能:接收用户选择的命令代码 参数: void 返回值: int工作方式:返回命令代码的整数值 要求:只允许选择规定键,如果输入不合要求,则提醒用户重 新输入13结束程序运行函数 函数原型: void quit(void) 功能:结束程序运行 参数: void 返回值: void 工作方式:根据要求决定在退出前是否将修改的记录存入文件 要求:结束运行之前,询问是否对修改的记录进行存储14头文件函数原型: device.h 功能:声明函数原型,包含文件及自定义宏和数据结构 参数: void 返回值: void 要求:报告是否能正常打开文件执行存入操

10、作及存入记录的条 数15 、文件 (2)主要函数流程图1 void addfacility(void)2. void select(void)3. void show(void)ina;1_ jiumD斛k尸一 一primR愀打可慌拆田吼求! J:returnprint门调厅必那忡卅的I來闭Ri_-丄亠_Knti mlln 就二一"一 一一 - -一 一M1阳皿汽汹弘心“叫tei.tiLimb£rAconk.工一一Ttr 一一一f|printtfSiJAfl肯JH迢连F):|1f144. int findRecord(char* target, int targetType

11、, int from)5. void removfacility(void)3iaFiP觥aimDiUce=4pMntfl虫百j片松比蕊工nr1»iUr)a<0faufc;二f-o lt<MM DElCluaij iL.pri侦"许J*扁训;“pri砒T和1血nrvicipfinfr d J黃QinLinurtiin):I7轧汕T山闽平d也d, Lli" ii “6. void modifyfacility(void)调试结果:(1)欢迎界面:输入密码(2)功能选择菜单(3)购进新设备功能而在于设备数量大于100台和小于100台的处理上,大于100台则

12、直 接输入可用设备的数目,而对于小于100台,则逐台输入每台的可用 性不可用性。(4)显示已有设备(5)报废设备报废功能也可以按照名字和编号来报废,报废前还会打印出将 要被报废的设备信息再一次询问操作者是否要删除该设备。(6)查找设备 按编号查找按设备名称查找(7)保存设备信息0(8)读取设备信息本人在程序设计中感想本人在程序设计的课程设计中感受到 : 很多的函数设计与学生管 理系统还是有挺大的差别的。 通过设置密码可改变背景和字体颜色的 设计,让我懂得了 C 语言还是有很多我没有了解到的地方,通过互 联网上的资源我们可以懂得的更多。 而遇到不懂的地方就要耐心的读 懂,实在不懂的就要谦虚地问同

13、学和老师,例如在程序设计过程中 scanf 语句与 getchar() 语句混搭容易出现跳句,需要不断的修改来 完善。将保存文件语句和读取文件语句穿插也需要注意,当记录为 0 时直接调用 saveRecord() 语句是保存不了的,所以需要再修改。通 过实验让我更加深刻学习到了 C 语言的好处。5 结束语C语言的程序设计实验的成功实验,靠得不仅仅是自己的努力, 还有同学的帮助,当然最重要的还是老师的耐心解答。参考文献1 谭浩强,C程序设计(第二版),北京:清华大学出版社,2001.1 (左对齐,宋体,五号)2 陈朔鹰,C语言程序设计习题集,北京:人民邮电出版社,2003.6facility.h

14、#ifndef H_STUDENT_HH / 女口果没有定义 H_STUDENT_H继续执行#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 num

15、ber20;/char name20;/char manufactory20; /设备编号设备名称设备生产厂家char year20;/float getnumbers;/设备购进年代设备购进数目float usable;/可用设备float price;/设备单价;typedef struct facility_info SBInfo;/定义一个类型名SBInfo 代表定义的结构体shebei_infoextern int numStus;/记录的设备数extern SBInfo* records;/记录设备信息的数组指extern int arraySize;/数组大小extern cha

16、r 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 sa

17、veRecords(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 ch115,ch215="JJ" char save

18、dTag = 0; / 存, 0为已保存/ 记录的学生数/ 记录学生信息的数组 数组大小信息是否已保存的标志,1为未保/*主函数*int main() system("color 9");/ 初始化数组 records =(SBInfo*)malloc(sizeof(SBInfo)*INITIAL_SIZE);/ 给数组分配 StuInfo 分配 INITIAL_SIZE 个记录空间大小 if (records = NULL)printf("memory fail!");exit(-1);/ 如果内存空间不够分配 , 退出程序arraySize = IN

19、ITIAL_SIZE;printf("*printf(" *callmeJJSINGLEJJBIRTHDAY * n");printf(" *lovelove *handsome19920929 * n");printf("* *n");-k-k*n");printf(" n");printf(" *n");printf("*QQ:496798140*n");printf("*嘿我是蓝俊杰*n");printf("*QQ QQ

20、 QQ*n");printf("*手机 :150 QQ QQ QQ673798673798 *n");printf("*15593798 QQ QQ QQ*n");printf(" n");printf(" * 欢迎使用 仪器设备基本 信息管理程序 * n");printf(" * n");printf("*设计者 蓝俊杰1251101121*n");printf("*n");printf("*n");printf("

21、;* *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");!tn");printf("ntt 欢迎使用设备管理系统select(); /*

22、 菜单处理函数*/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

23、_select( ) char s2; int cn=0; printf("n"); printf ( "t1. printf ( "t2. printf ( "t3. printf ( "t4. printf ( "t5. printf ( "t6. printf ( "t7. printf ( "t8.购进设备 n" ); 查找设备 n" ); 报废设备 n" ); 修改设备信息 n" ); 显示设备信息 n" ); 保存设备信息 n&quo

24、t; ); 读取设备信息 n" ); 退出程序 n" );1-8 :" );printf ( "nt 左边数字对应功能选择,请选 for(; ;)gets(s);输入错误,重选cn = atoi (s);if(cn<1| cn>8 ) printf("nt1-8 : ");else break;return cn;/* 结束运行,退出 * 参数量 void*/void quit(void)char str5;if (savedTag=1)printf("n 是否保存记录?( Y/n ) n"); pri

25、ntf(" 选择: ");gets(str);if(str0!='n'&&str0!='N')saveRecords();free(records);printf("n ByeBye啦啦啦啦nn");exit(0);facility_add_sum.c#include "facility.h"/* 打印表头*/float getnumbers,usenumbers_1,usenumbers_2;float unusable,usable;void showTable(void)print

26、f("nt 编号 t 名称 t 厂家 ");printf("t 年代 t 单价 t 数量 t 可用数 n");/* 显示所有的设备信息*/void show(void)int i;if (numStus = 0)n");printf("n 没有可供显示的记录!return;showTable();if(getnumbers<=100)for (i=0; i<numStus; i+)/ 打印设备的信息printf("t%st%st%st%st%.2ft%.ft%.fn",recor dsi.number,

27、,recordsi.manufactory ,recordsi.year,recordsi.price,recordsi.getnum bers,recordsi.usable);else if(getnumbers>100)for (i=0; i<numStus; i+)/ 打印设备的信息printf("t%st%st%st%st%.2ft%.ft%.fn",recor dsi.number,,recordsi.manufactory ,recordsi.year,recordsi.price,records

28、i.getnum bers,recordsi.usable);/* 在当前表的末尾增加新的信息* 结果: records 中将记录新的信* 息,如果数组大小不够,会重* 新申请数组空间*/void addfacility(void)char str10;float unusable,usable;int j;float getnumbers,usenumbers_1;float price;if(numStus=0)printf("n 原来没有记录,现在建立新表n");elseprintf("n 下面在当前表的末尾增加新的信 息 n");while(1)

29、/()中为 1表示无条件反复循环printf("您将要添加一组信息,确定吗?(Y/n)");gets(str);if (str0='n' | str0='N') /不再添加新的信息break;if (numStus >= arraySize) / 现在的数组空间不足, 需要重新申请空间records = realloc(records,(arraySize+INCR_SIZE)*sizeof(SBInfo );/ 新空间大小变为 (arraySize+INCR_SIZE) 记录大小 , 即 在原来基础上增加INCR_SIZE个记录大小i

30、f (records = NULL) printf("memory failed!");exit(-1);arraySize = arraySize+INCR_SIZE; /arraySize修改为新空间可保存的记录数printf("n 请输入设备编号: ");gets(recordsnumStus.number);printf(" 请输入设备名称: ");gets(recordsnumS);printf(请输入设备购进年代: ");gets(recordsnumStus.year);printf(请输入设备

31、生产厂家: ");gets(recordsnumStus.manufactory);printf(请输入设备单价: ");gets(str);price = (float)atof(str);recordsnumStus.price=price;printf(购进设备数量是否大于 100台?(Y/N)");gets(str);if (str0='y' | str0='Y')printf("n 请输入购进设备数量: ");gets(str);getnumbers = (float)atof(str); record

32、snumStus.getnumbers=getnumbers; printf(" 可用设备的数量有: "); gets(str);usenumbers_1= (float)atof(str);recordsnumStus.usable=usenumbers_1;else if(str0='n' | str0='N')printf(" 请输入购进设备数量: "); gets(str);getnumbers = (float)atof(str);recordsnumStus.getnumbers=getnumbers;unus

33、able=0;usable=0;for(j=1;j<=getnumbers;j+) printf("第台设备的可用性为:(设备不可用请输入 0,设备可用请输入 1) : ",j);gets(str);if (str0 = '0')unusable=unusable+1;else if(str0='1')usable=usable+1;recordsnumStus.usable=usable;unusable=0;usable=0;numStus+; /输入一设备记录后 , 设备数加 1printf("n现在一共有(条设备信息n

34、",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

35、+)if(targetType=0&&strcmp(target,recordsi.number)=0)|(targetType=1&&strcmp(target,)=0)return i;/ 如果找到符合条件的记录,返回记录号ireturn -1;/ 如果没有找到,返回 1/* 查询指定设备的信息* 可以按照设备编号或名称来查询*/ void seekfacility(void)char str5;char target20;int type;int count;int i;if(numStus=0)没有可供查询的记录 n"

36、);printf("nreturn;while(1) printf("n 回车键则结束查询) n");printf(" 1. printf(" 2. printf("n gets(str);if (str0 = '1') printf("n gets(target); type = 0; else if (str0 = '2') printf(" gets(target); type = 1;请输入查询的方式:(直接输入按设备编号查找 n");按设备名称查找 n"

37、);选择 :");请输入欲查找的设备编号: ");请输入欲查找的设备名称: ");else break;i = findRecord(target,type,0);/,从0号记录起查找,查询项 type ,查询目标数据项 targetif(i>=0)/ 打印查询到的设备的信息showTable();count = 0;while(i != -1)count+;/ 查询到的设备数加 1printf("t%st%st%st%st%.2ft%.ft%.fn",recordsi.number,,recordsi.manu

38、factory,recordsi.year,recordsi.price,recordsi.getnum bers,recordsi.usable);/ 输出 i 记录的各个数据项i = findRecord(target,type,i+1);/从 i+1条记录起查找下一条符合条件的记录if (count=0) printf("n没有符合条件的设备! n");else printf("n信息 nn",count);/* 删除指定的记录*/ void removefacility(void) char str5;char target20;int type

39、;int i,j;if(numStus=0) 一共找到了 种设备的没有可供删除的记录 n");printf("nreturn;while(1) printf("n 请输入如何找到欲报废的设备: 直接输入回车键则结束移除操作) n");printf("1.按设备编号 n");printf("2.按设备名称 n");printf("n选择 :");gets(str);if (str0 = '1')printf("n 请输入该设备的编号: ");gets(targe

40、t);type = 0; else if (str0 = '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%st%st%st%st%.2ft%.ft%.fn",recor dsi.number,,recordsi.manufac

41、tory ,recordsi.year,recordsi.price,recordsi.getnum bers,recordsi.usable);printf("n 真的要删除该设备吗?(y/N)");gets(str);if(str0='Y'|str0='y')numStus-;for (j=1;j<numStus;j+)copyRecord(&recordsj+1,&recordsj);i=findRecord(target,type,i+1);1,表示savedTag = 1;/ 删除一条记录后,保存标志变为 未保

42、存/* 将 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-&g

43、t;getnumbers = hum->getnumbers;/* 修改指定设备的信息*/void modifyfacility(void)char str5;char target20;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 请输入想要修改的设备记录的方 式:(直接输入

44、回车键则结束移除操作) n");printf(" 1. 按设备编号 n");printf(" 2. printf("n gets(str);if (str0 = '1')printf("n gets(target); type = 0; else if (str0 = '2') printf(" gets(target); type = 1; else break;按设备名称 n");选择 :");请输入该设备的编号: ");请输入该设备的名称: ");

45、i=findRecord(target,type,0);没有符合条件的设if (i=-1) printf("n 备! n");while(i != -1)showTable();printf("t%st%st%st%st%.2ft%.ft%.ft%.fn",recordsi.number,,recordsi.manufactory,recordsi.year,recordsi.price,recordsi.g etnumbers,recordsi.usable);printf("n 确定要修改该设备的信息吗?(Y/N)

46、");gets(str);if (str0='y' | str0='Y')printf("n下面请重新输入该设备的信息: n");printf("n请输入设备编号: ");gets(recordsi.number);printf(" 请输入设备名称: "); gets();printf(" 请输入设备购进年代: ");gets(recordsi.year);printf(" 请输入设备生产厂家: ");gets(recordsi

47、.manufactory);printf(" 请输入设备单价: ");gets(str);price = (float)atof(str);recordsi.price=price;printf(" 购进设备数量是否大于 100台?(Y/N)n");gets(str);if (str0='y' | str0='Y')printf("请输入购进设备数量:");gets(str);getnumbers = (float)atof(str);recordsi.getnumbers=getnumbers;pri

48、ntf(" 可用设备的数量有:");gets(str);usenumbers_1= (float)atof(str);recordsi.usable=usenumbers_1;printf(" 不可用设备的数量有:");gets(str);usenumbers_2= (float)atof(str);else if(str0='n' | str0='N')printf(" 请输入购进设备数gets(str);getnumbers = (float)atof(str); recordsi.getnumbers=ge

49、tnumbers;unusable=0;usable=0; for(j=1;j<=getnumbers;j+) printf(" 第0台设备的可用性为:0”设备不可用, “1”设备可用 : ",j);gets(str);if (str0 = '0')unusable=unusable+1;else if(str0='1')usable=usable+1;recordsi.usable=usable;unusable=0;usable=0;i=findRecord(target,type,i+1);else break;savedTag

50、= 1;facility_save_load.c#include "facility.h"/* 文件存储操作函数* 结果:数组 records 被保存至指定文件* 返回:成功 0 ,失败 -1*/int saveRecords()FILE *fp;char fname30;if (numStus = 0)printf("n没有记录可存! n");return -1;printf("n请输入要存入的文件名 (直接回车选择文件 sb_info ): ");gets(fname);if (strlen(fname) = 0) strcpy(fname,"sb_info");if (fp=fopen(fname,"wb")=NU

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论