c语言设备管理系统.doc
课程设计说明书学 院、系:专 业:学 生 姓 名:学 号:设 计 题 目:设备管理系统 起 迄 日 期:指 导 教 师:日期: 2017年5月12日1 设计目的 提高程序设计能力,检验课堂教学内容,掌握程序设计的基本方法和调试技能。通过课程实训,加深对结构化程序设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构;进一步掌握C语言中的重要数据结构;掌握并熟练运用指针,链表,结构体和文件等结构;提高程序开发哪里,能运用合理的控制流编写清晰高效的程序;培养C语言只是运用与自学能力,加强程序分析能力。2 任务概述功能:设备管理系统应包含各种设备的全部信息,每台设备为一条记录(同一时间同一部门购买的若干台相同设备可作为1条记录),包括设备号、设备名称、领用人、所属部门、数量、购买时间、价格等。能够显示和统计各种设备的信息。 分步实施:1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数; 2、完成最低要求:建立一个文件,包含一个部门10台设备的信息,能对文件进行补充、修订、删除,能统计所有设备的总价值。 3、进一步要求:完成设备按种类、按所属部门进行统计。3 模块划分 系统可设计为:实验设备信息写入模块实验设备信息输出模块 .实验设备信息查询模块实验设备信息添加模块实验设备信息删除模块实验设备信息查询模块实验设备信息统计模块结构体成员包括设备号, 设备名称, 设备领用人, 设备所属部门 ,设备数量 ,设备购买时间, 设备价格 。4 主要函数说明及其N-S图设备管理系统实验设备信息统计模块实验设备信息添加模块实验设备信息查询模块 实验设备信息删除模块进入菜单功能选择实验设备信息查询模块实验设备信息输出模块实验设备信息写入模块 4.1 主函数流程图 输入数字numberT number=1 Fchec() T number=2 F add() T number=3 Fdel() T number=4 Falt() T number=5 Fcount() T number=0 F 退出系统 4.2 N-S图 开始4.3查询记录按要求查看记录 图4.3 结束 开始4.4读入/写入文件定义文件指针F判断文件是否可存在?创建一个文件 T 图4.4 写入数据 关闭文件 结束4.5添加数据 开始按要求输入信息 完成一条记录的添加 图4.5 F是否继续输入? T 结束 开始4.6删除数据 输入设备ID号 进行删除操作 图4.6 结束4.7修改数据 开始 输入要修改的ID号 图4.7 按要求修改数据 结束 开始4.8统计数据 选择统计方式 图4.8 显示统计结果 结束5 程序运行数据及其结果 图5.1 进入界面 图5.2菜单&功能选择图5.3 添加数据 图5.4 查看数据 图5.5 删除数据 图5.6 修改数据 图5.7 统计数据6 课程设计心得经历了大一上半学期C语言课程,C语言笔试,C语言机试的“洗礼”,让我对C语言的有了进一步的认识,深深认识到自己学习的还不够,平时敲的代码也太少,作为一名软件工程的学生,感到深深的愧疚,对不起老师,对不起父母,更对不起自己,同时为自己将来毕业后的命运感到一份担忧。在大一下学期C语言实训中,不仅有网上已有成果的借鉴与分析,以及向同学的请教,还有相关资料的查阅,既加深了自身能力的认知与对自己不足的体会,也优化了和同学的关系,真可谓一举两得。同时还得出一个结论:亲身下河知深浅,亲口尝梨知酸甜!作为一名软件工程的学生,平时在电脑跟前敲代码的过程是必需的,谁也躲不了,一份努力,一份收获,同时,学习语言需要细密又严谨的思维,良好的操作习惯,这样才有可能在编程的道路上百尺竿头更进一步!也希望各位老师、身边的同学监督,更需要自己的积极自省。期待三年后一个成熟优秀的自己!附录:#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <string.h>void menu(); /功能选择void add(); /添加信息void del(); /删除信息void alt(); /修改信息void chec(); /查看信息void count(); /统计信息void read(); /读取文件void write(); /写入文件struct array char ano20,aname20,aowner20,aapartment20,aamount20,atime20,aprice20; int del; /判断是否删除,值为0为未删除,1为已删除 a20;int No,sum;int main() system("mode con cols=145 lines=35"); puts("nnnnnnnnnnnnn <<<<<<欢迎使用设备管理系统!>>>>>>"); getchar(); read(); /实现文件读进内存 menu(); /实现功能选择 write(); /实现信息写入文件 return 0;void menu()system("cls");int a; puts("nnnnnn<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<请选择需要的功能:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); puts(" 1.查看设备信息n 2.添加设备信息n 3.删除设备信息n 4.修改设备信息n 5.统计设备信息n 0.退出系统"); printf("tt请选择你的功能(选择05) bb");scanf("%d",&a); switch (a) case 0:return; case 1:chec();break; case 2:add();break;case 3:del();break; case 4:alt();break;case 5:count();break;default:printf("信息有误!请检查后重新输入n"); void read() No=0; FILE *fp=fopen("D:infor.txt","r+"); /读写功能 if(fp=NULL)fp=fopen("D:infor.txt","w+"); /若没有则创建一个txt fclose(fp); int i; for(i=0;!feof(fp);i+) fread(&ai,sizeof(struct array),1,fp); /一次读取一个 No+;No=No-1; fclose(fp);void write() int i; FILE *fp=fopen("D:infor.txt","w+"); for (i=0;i<No;i+) if (!ai.del) fwrite(&ai,sizeof(struct array),1,fp); fclose(fp);void chec()int i;printf(" 设备号 设备名称 领用人 所属部门 数量 购买时间 价格n");for(i=0;i<No;i+)if(ai.del=0)printf("%8s%20s%20s%20s%20s%20s%20sn",ai.ano,ai.aname,ai.aowner,ai.aapartment,ai.aamount,ai.atime,ai.aprice);getchar();getchar();menu();void add()char s;printf("请输入要添加的设备号:n");scanf("%s",aNo.ano);printf("请输入要添加的设备名称:n");scanf("%s",aNo.aname);printf("请输入要添加的设备领用人:n"); scanf("%s",aNo.aowner);printf("请输入要添加的设备的所属部门:n"); scanf("%s",aNo.aapartment);printf("请输入要添加的设备数量:n"); scanf("%s",aNo.aamount);printf("请输入要添加的设备购买时间:n");scanf("%s",aNo.atime);printf("请输入要添加的设备价格:n");scanf("%s",aNo.aprice);aNo.del=0;No+=1;printf("请问是否继续添加?(Y/N)(不区分大小写)n");while (1)getchar();gets(&s);if (s='Y'|s='N'|s='y'|s='n')break;elseputs("信息有误!请检查后重新输入n");puts("按任意键重新输入!");getchar();getchar();getchar(); if(s='Y'|s='y')add();else if(s='N'|s='n')system("cls");menu();void del()char ch20,s;int i;printf("请输入要删除的设备编号:(0键返回菜单栏)n");printf(" 设备号 设备名称 领用人 所属部门 数量 购买时间 价格n");for(i=0;i<No;i+)if(ai.del=0)printf("%4d%20s%20s%20s%20s%20s%20s%20sn",i+1,ai.ano,ai.aname,ai.aowner,ai.aapartment,ai.aamount,ai.atime,ai.aprice);while (1)scanf("%s",ch);i=atoi(ch);if (i>=1 && i<=No)break;else if(i=0)return;else puts("信息有误!请检查后重新输入n");ai-1.del=1;printf("是否继续删除?(Y/N)(不区分大小写)n");while (1)getchar();gets(&s);if (s='Y'|s='N'|s='y'|s='n')break;else puts("信息有误!请检查后重新输入n");if(s='Y'|s='y')del();else if(s='N'|s='n')system("cls");menu(); void alt()char s,ch20;int i,j;printf("请输入修改的设备的编号:n");printf(" 设备号 设备名称 领用人 所属部门 数量 购买时间 价格n");for(i=0;i<No;i+)printf("%4d%20s%20s%20s%20s%20s%20s%20sn",i+1,ai.ano,ai.aname,ai.aowner,ai.aapartment,ai.aamount,ai.atime,ai.aprice);while (1)scanf("%s",ch);i=atoi(ch);if (i>=1 && i<=No)break;else if(i=0)return;else puts("信息有误!请检查后重新输入n");if(ai-1.del=1)printf("该设备已被删除!n");return;printf("请输入您要修改的内容的编号:n1.设备号n2.设备名称n3.领用人n4.所属部门n5.数量n6.购买时间n7.价格n0.返回菜单栏n");while (1)scanf("%s",ch);j=atoi(ch);if (j>=1 && j<=7)break;else if(i=0)return;else puts("信息有误!请检查后重新输入n");printf("请输入要修改的信息:n");switch (j) case 1:scanf("%s",ai-1.ano);break; case 2:scanf("%s",ai-1.aname);break; case 3:scanf("%s",ai-1.aowner);break; case 4:scanf("%s",ai-1.aapartment);break; case 5:scanf("%s",ai-1.aamount);break;case 6:scanf("%s",ai-1.atime);break;case 7:scanf("%s",ai-1.aprice);break; printf("是否继续修改?(Y/N)(不区分大小写)n");while (1)getchar(); /获取回车 gets(&s); /获取s if (s='Y'|s='N'|s='y'|s='n')break;else puts("信息有误!请检查后重新输入n");if(s='Y'|s='y')alt();else if(s='N'|s='n')system("cls");menu();void count()char ch20,temp20,s;int i,j,n;sum=0;printf("请选择统计方式:n1.所有设备的总价值。n2.设备所属部门。n3.设备种类。n0.返回菜单栏n");while (1)scanf("%s",ch);j=atoi(ch);if (j>=1 && j<=3)break;else if(j=0)return;else puts("信息有误!请检查后重新输入n");switch (j) case 1:for(i=0;i<No;i+)if(ai.del=0)sum=atoi(ai.aprice)*atoi(ai.aamount)+sum;printf("当前设备的总价值为%d。n",sum);break; case 2:printf("设备所属部门统计结果为:n 所属部门 数量 总价值n");for(i=0;i<No;i+)sum=0;n=0;strcpy(temp,ai.aapartment); /将可变的数组ai 复制到temp数组中 for(j=0;j<No;j+)if(strcmp(temp,aj.aapartment)=0&&i>j)break;else if(strcmp(temp,aj.aapartment)=0&&i<j&&aj.del=0)sum=sum+atoi(aj.aamount)*atoi(aj.aprice);n=n+atoi(aj.aamount);if(strcmp(temp,aj.aapartment)=0&&i>j)continue;if(ai.del=0)sum=sum+atoi(ai.aamount)*atoi(ai.aprice);n=n+atoi(ai.aamount);if(sum=0)continue;printf("%20s%20d%20dn",ai.aapartment,n,sum);break; case 3:printf("设备种类统计结果为:n 设备名 数量 总价值n");for(i=0;i<No;i+)sum=0;n=0;strcpy(temp,ai.aname);for(j=0;j<No;j+)if(strcmp(temp,aj.aname)=0&&i>j)break;else if(strcmp(temp,aj.aname)=0&&i<j&&aj.del=0)sum=sum+atoi(aj.aamount)*atoi(aj.aprice);n=n+atoi(aj.aamount);if(strcmp(temp,aj.aname)=0&&i>j)continue;if(ai.del=0)sum=sum+atoi(ai.aamount)*atoi(ai.aprice);n=n+atoi(ai.aamount);if(sum=0)continue;printf("%20s%20d%20dn",ai.aname,n,sum);break;printf("请问是否继续统计?(Y/N)(不区分大小写)n");while (1)getchar();gets(&s);if (s='Y'|s='N'|s='y'|s='n') break;else puts("信息有误!检查后重新输入n");if(s='Y'|s='y')count();else if(s='N'|s='n')system("cls");此文档可自行编辑修改,如有侵权请告知删除,感谢您的支持,我们会努力把内容做得更好