c语言设备管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计说明书
学院、系:
专业:
学生姓名:学号:
设计题目:设备管理系统
起迄日
期:
指导教
师:
日期: 2017年5月12日
1 设计目的
提高程序设计能力,检验课堂教学内容,掌握程序设计的基本方法和调试技能。
通过课程实训,加深对结构化程序设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构;进一步掌握C语言中的重要数据结构;掌握并熟练运用指针,链表,结构体和文件等结构;提高程序开发哪里,能运用合理的控制流编写清晰高效的程序;培养C语言只是运用与自学能力,加强程序分析能力。
2 任务概述
功能:设备管理系统应包含各种设备的全部信息,每台设备为一条记录(同一时间同一部门购买的若干台相同设备可作为1条记录),包括设备号、设备名称、领用人、所属部门、数量、购买时间、价格等。
能够显示和统计各种设备的信息。
分步实施:
1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;
2、完成最低要求:建立一个文件,包含一个部门10台设备的信息,能对文件进行
补充、修订、删除,能统计所有设备的总价值。
3、进一步要求:完成设备按种类、按所属部门进行统计。
3 模块划分
系统可设计为:
实验设备信息写入模块
实验设备信息输出模块.
实验设备信息查询模块
实验设备信息添加模块
实验设备信息删除模块
实验设备信息查询模块
实验设备信息统计模块
结构体成员包括设备号,设备名称,设备领用人,设备所属部门,设备数量,设备购买时间,设备价格。
4 主要函数说明及其N-S图
4.1 主函数流程图
4.2 N-S 图
4.3查询记录
4.4读入/写入文件
图4.4
4.5添加数据
图4.5
4.6删除数据
4.7修改数据
4.8统计数据
5 程序运行数据及其结果
图5.1 进入界面
图5.2菜单&功能选择
图5.3 添加数据
图5.4 查看数据
图5.5 删除数据
图5.6 修改数据
图5.7 统计数据
6 课程设计心得
经历了大一上半学期C语言课程,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 ano[20],aname[20],aowner[20],aapartment[20],aamount[20],atime[20],aprice[20];
int del; //判断是否删除,值为0为未删除,1为已删除
} a[20];
int No,sum;
int main()
{
system("mode con cols=145 lines=35");
puts("\n\n\n\n\n\n\n\n\n\n\n\n\n <<<<<<欢迎使用设备管理系统!>>>>>>");
getchar();
read(); //实现文件读进内存
menu(); //实现功能选择
write(); //实现信息写入文件
return 0;
}
void menu()
{
system("cls");
int a;
puts("\n\n\n\n\n\n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<请选择需要的功
能:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>");
puts(" 1.查看设备信息\n
2.添加设备信息\n
3.删除设备信息\n
4.修改设备信息\n
5.统计设备信息\n
0.退出系统");
printf("\t\t请选择你的功能(选择0~5)[ ]\b\b");
s canf("%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)
{
f p=fopen("D:\\infor.txt","w+"); //若没有则创建一个txt
f close(fp);
}
int i;
for(i=0;!feof(fp);i++)
{
fread(&a[i],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 (!a[i].del)
fwrite(&a[i],sizeof(struct array),1,fp);
fclose(fp);
}
void chec()
{
int i;
printf(" 设备号设备名称领用人所属部门
数量购买时间价格\n");
for(i=0;i<No;i++)
{
i f(a[i].del==0)
p rintf("%8s%20s%20s%20s%20s%20s%20s\n",a[i].ano,a[i].aname,a[i].aowner,a[i].aapartment,a[ i].aamount,a[i].atime,a[i].aprice);
}
getchar();
getchar();
menu();
}
void add()
{
char s;
printf("请输入要添加的设备号:\n");
scanf("%s",a[No].ano);
printf("请输入要添加的设备名称:\n");
scanf("%s",a[No].aname);
printf("请输入要添加的设备领用人:\n");
scanf("%s",a[No].aowner);
printf("请输入要添加的设备的所属部门:\n");
scanf("%s",a[No].aapartment);
printf("请输入要添加的设备数量:\n");
scanf("%s",a[No].aamount);
printf("请输入要添加的设备购买时间:\n");
scanf("%s",a[No].atime);
printf("请输入要添加的设备价格:\n");
scanf("%s",a[No].aprice);
a[No].del=0;
No+=1;
printf("请问是否继续添加?(Y/N)(不区分大小写)\n"); while (1)
{
g etchar();
g ets(&s);
i f (s=='Y'||s=='N'||s=='y'||s=='n')
break;
e lse{
puts("信息有误!请检查后重新输入\n");
puts("按任意键重新输入!");
getchar();
getchar();
getchar();
}
}
if(s=='Y'||s=='y')
a dd();
else if(s=='N'||s=='n')
s ystem("cls");
menu();
}
void del()
{
char ch[20],s;
int i;
printf("请输入要删除的设备编号:(0键返回菜单栏)\n");
printf(" 设备号设备名称领用人所属部门数量购买时间价格\n");
for(i=0;i<No;i++)
{
i f(a[i].del==0)
p rintf("%4d%20s%20s%20s%20s%20s%20s%20s\n",i+1,a[i].ano,a[i].aname,a[i].aowner,a[i].aap artment,a[i].aamount,a[i].atime,a[i].aprice);
}
while (1)
{
s canf("%s",ch);
i=atoi(ch);
i f (i>=1 && i<=No)
break;
e lse if(i==0)
return;
e lse puts("信息有误!请检查后重新输入\n");
}
a[i-1].del=1;
printf("是否继续删除?(Y/N)(不区分大小写)\n");
while (1)
{
g etchar();
g ets(&s);
i f (s=='Y'||s=='N'||s=='y'||s=='n')
break;
e lse puts("信息有误!请检查后重新输入\n");
}
if(s=='Y'||s=='y')
d el();
else if(s=='N'||s=='n')
s ystem("cls");
menu();
}
void alt()
{
char s,ch[20];
int i,j;
printf("请输入修改的设备的编号:\n");
printf(" 设备号设备名称领用人所属部门数量购买时间价格\n");
for(i=0;i<No;i++)
{
p rintf("%4d%20s%20s%20s%20s%20s%20s%20s\n",i+1,a[i].ano,a[i].aname,a[i].aowner,a[i].aap artment,a[i].aamount,a[i].atime,a[i].aprice);
}
while (1)
{
s canf("%s",ch);
i=atoi(ch);
i f (i>=1 && i<=No)break;
e lse if(i==0)return;
e lse puts("信息有误!请检查后重新输入\n");
}
if(a[i-1].del==1)
{
p rintf("该设备已被删除!\n");
r eturn;
}
printf("请输入您要修改的内容的编号:\n1.设备号\n2.设备名称\n3.领用人\n4.所属部门\n5.数量\n6.购买时间\n7.价格\n0.返回菜单栏\n");
while (1)
{
s canf("%s",ch);
j=atoi(ch);
i f (j>=1 && j<=7)
break;
e lse if(i==0)
{
return;
}
e lse puts("信息有误!请检查后重新输入\n");
}
printf("请输入要修改的信息:\n");
switch (j)
{
c ase 1:
{scanf("%s",a[i-1].ano);
break;}
case 2:
{scanf("%s",a[i-1].aname);
case 3:
{scanf("%s",a[i-1].aowner);
break;}
case 4:
{scanf("%s",a[i-1].aapartment);
break;}
case 5:
{scanf("%s",a[i-1].aamount);
break;}
c ase 6:
{scanf("%s",a[i-1].atime);
break;}
c ase 7:
{scanf("%s",a[i-1].aprice);
break;}
}
printf("是否继续修改?(Y/N)(不区分大小写)\n"); while (1)
{
g etchar(); //获取回车
g ets(&s); //获取s
i f (s=='Y'||s=='N'||s=='y'||s=='n')
e lse puts("信息有误!请检查后重新输入\n");
}
if(s=='Y'||s=='y')
a lt();
else if(s=='N'||s=='n')
s ystem("cls");
menu();
}
void count()
{
char ch[20],temp[20],s;
int i,j,n;
sum=0;
printf("请选择统计方式:\n1.所有设备的总价值。
\n2.设备所属部门。
\n3.设备种类。
\n0.返回菜单栏\n");
while (1)
{
s canf("%s",ch);
j=atoi(ch);
i f (j>=1 && j<=3)
break;
e lse if(j==0)
{
return;
}
e lse puts("信息有误!请检查后重新输入\n");
}
switch (j)
{
case 1:
{
for(i=0;i<No;i++)
{
if(a[i].del==0)
sum=atoi(a[i].aprice)*atoi(a[i].aamount)+sum;
}
printf("当前设备的总价值为%d。
\n",sum);
break;
}
case 2:
{
printf("设备所属部门统计结果为:\n 所属部门数量总价值\n");
for(i=0;i<No;i++)
{
sum=0;
n=0;
strcpy(temp,a[i].aapartment); //将可变的数组a[i] 复制到temp数组中for(j=0;j<No;j++)
{
if(strcmp(temp,a[j].aapartment)==0&&i>j)
break;
else if(strcmp(temp,a[j].aapartment)==0&&i<j&&a[j].del==0)
{
sum=sum+atoi(a[j].aamount)*atoi(a[j].aprice);
n=n+atoi(a[j].aamount);
}
}
if(strcmp(temp,a[j].aapartment)==0&&i>j)
continue;
if(a[i].del==0)
{ sum=sum+atoi(a[i].aamount)*atoi(a[i].aprice);
n=n+atoi(a[i].aamount);
}
if(sum==0)
continue;
printf("%20s%20d%20d\n",a[i].aapartment,n,sum);
}
break;
}
case 3:
{
printf("设备种类统计结果为:\n 设备名数量总价值\n");
for(i=0;i<No;i++)
{
sum=0;
n=0;
strcpy(temp,a[i].aname);
for(j=0;j<No;j++)
{
if(strcmp(temp,a[j].aname)==0&&i>j)
break;
else if(strcmp(temp,a[j].aname)==0&&i<j&&a[j].del==0)
{
sum=sum+atoi(a[j].aamount)*atoi(a[j].aprice);
n=n+atoi(a[j].aamount);
}
}
if(strcmp(temp,a[j].aname)==0&&i>j)
continue;
if(a[i].del==0)
{ sum=sum+atoi(a[i].aamount)*atoi(a[i].aprice);
n=n+atoi(a[i].aamount);
}
if(sum==0)
continue;
printf("%20s%20d%20d\n",a[i].aname,n,sum);
}
break;
}
}
printf("请问是否继续统计?(Y/N)(不区分大小写)\n");
while (1)
{
g etchar();
g ets(&s);
i f (s=='Y'||s=='N'||s=='y'||s=='n') break;
e lse puts("信息有误!检查后重新输入\n");
}
if(s=='Y'||s=='y')
c ount();
else if(s=='N'||s=='n')
s ystem("cls");
}。