C语言课程设计设备管理系统.docx
《C语言课程设计设备管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计设备管理系统.docx(25页珍藏版)》请在冰豆网上搜索。
![C语言课程设计设备管理系统.docx](https://file1.bdocx.com/fileroot1/2023-6/23/95a3d468-4742-4f5b-b18b-ebf5a50f8208/95a3d468-4742-4f5b-b18b-ebf5a50f82081.gif)
C语言课程设计设备管理系统
#include
#include
#include
#include
typedefstructdate
{
intyear;
intmonth;
intday;
}DATE;
typedefstructshebei{
intno;
charname[10];
DATEbuydate;
longprice;
charadress[30];
chardepartment[10];
structshebei*next;
}SB;
/*--------------------------------------函数定义-----------------------------------*/
voidintroduce();//自我介绍
voidmenu();//菜单
voidaddnode(SB*head);//插入结点
voidshow(SB*q);//显示一个节点信息
voidfind_no(SB*head);//根据设备号查设备信息
voidfind_depart(SB*head);//根据设备名称查询设备信息
voidmodify(SB*head);//根据设备号,修改设备信息
voiddel(SB*head);//根据设备号,删除设备信息
SB*numfind(SB*p);//给定设备号,返回该设备号的结点
voidread(SB*haed);//从文件中读取设备信息,并插入链表中
voidsave(SB*head);//将设备信息保存到文件中
voidcount_name(SB*head);//根据设备名称,统计一种设备的总数
voidcount_depart(SB*head);//根据部门名称,统计一个部门所用设备总数
voidshowall(SB*head);//显示所有设备信息
intdate_check(intyear,intmonth);
/*---------------------------------------主函数--------------------------------------*/
intmain()
{
intcom;
SBHead;//设定链表头结点,头结点中没有数据信息
charch,ch1;
system("colorf0");
introduce();
system("PAUSE");//暂停界面
system("CLS");
Head.next=NULL;
printf("导入数据库信息,");
read(&Head);
system("PAUSE");
while
(1)
{
system("CLS");//清屏,申明于stdlib.h,显示之前清除之前的显示
fflush(stdin);
menu();
printf("请输入您的选择<0~10>:
");
scanf("%d",&com);
ch1=getchar();//吸收回车符,以免以后输入字符出现意外
printf("\n");
switch(com)
{
case1:
read(&Head);break;
case2:
addnode(&Head);break;
case3:
find_no(&Head);break;
case4:
find_depart(&Head);break;
case5:
count_name(&Head);break;
case6:
count_depart(&Head);break;
case7:
showall(&Head);break;
case8:
modify(&Head);break;
case9:
del(&Head);break;
case10:
save(&Head);break;
case0:
{
printf("\n是否保存(Y/N)?
");
ch=getchar();
ch1=getchar();//吸收回车符
if((ch=='Y')||(ch=='y'))
save(&Head);
return0;
}break;
default:
printf("操作错误!
请重新输入...\n\n");
}
system("PAUSE");//暂停界面
}
}
/*--------------------------------------自我介绍-------------------------------------*/
//函数名称:
introduce
//函数功能:
显示自我介绍
//函数说明:
无参数,将我的信息显示在屏幕上
/*-----------------------------------------------------------------------------------*/
voidintroduce()
{
printf("\n\n\t------------------------自我介绍-----------------------\n");
printf("\t\t班级:
T1323-16\n");
printf("\t\t姓名:
王某某\n");
printf("\t\tQQ:
353579464\n");
printf("\t\t题目:
6.设备管理\n");
printf("\t\t题目要求:
\n");
printf("\t\t
(1)能从键盘输入设备信息\n");
printf("\t\t
(2)指定设备号,显示设备信息\n");
printf("\t\t(3)指定部门名称,显示该部门所使用的设备\n");
printf("\t\t(4)给定设备号,修改设备的信息\n");
printf("\t\t(5)给定设备号,删除设备信息\n");
printf("\t\t扩展功能:
\n");
printf("\t\t
(1)统计一种设备总数\n");
printf("\t\t
(2)统计某部门使用的设备总数\n");
printf("\t\t(3)从文件中读设备信息\n");
printf("\t\t(4)将设备信息保存到文件中\n");
printf("\t--------------------------------------------------------\n\n\t\t\t");
}
/*----------------------------------------菜单---------------------------------------*/
//函数名称:
menu
//函数功能:
显示菜单
//函数说明:
无参数,将菜单显示在屏幕上
/*-----------------------------------------------------------------------------------*/
voidmenu()
{
printf("**********************欢迎进入设备信息管理菜单***************************\n");
printf("*1.从文件中导入设备信息*\n");
printf("*2.输入设备信息*\n");
printf("*3.根据设备号查询设备信息*\n");
printf("*4.根据部门名称查询设备信息*\n");
printf("*5.统计某种设备的总数*\n");
printf("*6.统计某部门所用设备总数*\n");
printf("*7.显示所有设备信息*\n");
printf("*8.修改设备信息*\n");
printf("*9.删除设备*\n");
printf("*10.保存*\n");
printf("*0.退出*\n");
printf("*************************************************************************\n");
}
/*----------------------------------------addnode--------------------------------------------*/
//函数名称:
addnode
//函数功能:
建立链表
//函数说明:
参数为表头指针,创建新结点,输入设备信息,将新结点插入头结点后
/*-------------------------------------------------------------------------------------------*/
voidaddnode(SB*head)
{
SB*newp,*p;
intmaxday;
while
(1)
{
p=head->next;
newp=(SB*)malloc(sizeof(SB));//开辟一个新结点
printf("\n\n请输入设备号(输入0结束输入):
");
scanf("%d",&newp->no);//输入设备号
if(newp->no==0)break;//输入0代表结束,跳出while循环
for(;p!
=NULL;p=p->next)//循环查找设备号
{//这里花括号必须加,不然for语句没有结束,运行会出错
if(p->no==newp->no)break;//已查找到,跳出for循环
}
if(p!
=NULL){
printf("\n设备号已存在!
请重新输入...");
free(newp);//释放之前开辟的空间
continue;
}
printf("请输入设备名称:
");
scanf("%s",&newp->name);
printf("请输入购买日期(格式:
0000-00-00):
");
while
(1){//方便输入错误以后重新输入
scanf("%d-%d-%d",&newp->buydate.year,&newp->buydate.month,&newp->buydate.day);
maxday=date_check(newp->buydate.year,newp->buydate.month);
if(newp->buydate.month>12||newp->buydate.day>maxday)
printf("\n日期输入错误!
请重新输入:
");//月份超出1~12或者日期超出1~31则提示错误
elsebreak;//格式正确,跳出当前循环,继续输入其他信息
}
printf("请输入设备价格:
");
while
(1){//方便输入错误以后重新输入
scanf("%ld",&newp->price);
if(newp->price<0)printf("\n价格不能小于0,请重新输入:
");//价格小于0报错
elsebreak;//格式正确,跳出while循环,继续输入其他信息
}
printf("请输入设备生产厂家:
");
scanf("%s",&newp->adress);
printf("请输入使用部门:
");
scanf("%s",&newp->department);
newp->next=head->next;//在头结点后插入新结点
head->next=newp;
}
}
/*------------------------------------------show----------------------------------------------*/
//函数名称:
show
//函数功能:
显示一个结点信息
//函数说明:
参数为要显示的结点指针
/*--------------------------------------------------------------------------------------------*/
voidshow(SB*q)
{
printf("***********************************\n");//显示设备信息
printf("设备号:
%d\n",q->no);
printf("设备名称:
%s\n",q->name);
printf("购买日期:
%d-%d-%d\n",q->buydate.year,q->buydate.month,q->buydate.day);
printf("设备价格:
%ld\n",q->price);
printf("生产厂家:
%s\n",q->adress);
printf("使用部门:
%s\n",q->department);
printf("***********************************\n\n");
}
/*-----------------------------------------find-----------------------------------------------*/
//函数名称:
find
//函数功能:
找到查找的设备号对应结点
//函数说明:
参数为链表头结点指针,找到设备号对应的结点,返回该结点指针(设备数据库不为空时才能查)
/*--------------------------------------------------------------------------------------------*/
SB*numfind(SB*head)
{
SB*p;
intnum;
charch;
scanf("%d",&num);
ch=getchar();//吸收回车符
for(p=head->next;p!
=NULL;p=p->next)//循环查找设备号
if(p->no==num)break;//已查找到,跳出for循环
if(p==NULL)//p=NULL表示未找到对应设备信息
printf("\n没有找到该设备号!
\n\n");//提示没有找到设备信息
returnp;
}
/*-------------------------------------find_no------------------------------------------------*/
//函数名称:
find_no
//函数功能:
根据设备号,查询设备信息
//函数说明:
参数为链表头结点指针,将查询到的设备信息显示在屏幕上
/*--------------------------------------------------------------------------------------------*/
voidfind_no(SB*head)
{
charch;
SB*p;
while
(1)
{
p=head->next;
if(p==NULL){
printf("设备信息数据库为空!
请选择其他操作...\n\n");//检查数据库是否为空,再查找设备号
break;
}
else{
printf("\n\n请输入要查询的设备号:
");
p=numfind(head);
if(p!
=NULL)show(p);//找到对应设备号,输出设备信息
}
printf("是否继续查询?
(Y/N)");//提示是否继续
ch=getchar();//吸收回车符
if((ch=='N')||(ch=='n'))break;//如果回答n或N,则跳出while循环
elseif((ch!
='Y')&&(ch!
='y')){
printf("输入错误!
");//如果回答既不是Y也不是N则,提示错误,返回菜单界面
break;
}
}
}
/*----------------------------------find_depart-----------------------------------------------*/
//函数名称:
find_depart
//函数功能:
根据部门名称,查询设备信息
//函数说明:
参数为链表头结点指针,将查找到的设备信息显示在屏幕上
/*--------------------------------------------------------------------------------------------*/
voidfind_depart(SB*head)
{
SB*p;
inti;
charfindname[10],ch,ch1;
while
(1)
{
p=head->next;
if(p==NULL){
printf("设备信息数据库为空!
请选择其他操作...\n");
break;
}
printf("\n\n请输入部门名称:
");
gets(findname);
for(i=0,p=head->next;p!
=NULL;p=p->next)//循环,查找对应的部门名称
{
if(strcmp(findname,p->department)==0)
{
show(p);
i++;//统计该部门使用的设备个数
}
}
if(i==0)//i=0,即设备信息中没有该部门
printf("\n找不到该部门使用的设备!
\n");//提示未找到对应部门
printf("\n是否继续查询?
(Y/N)");//提示是否继续
ch=getchar();
ch1=getchar();//吸收回车符
if((ch=='N')||(ch=='n'))break;//如果回答n或N,则跳出while循环
elseif((ch!
='Y')&&(ch!
='y'))
{
printf("\n输入错误!
");//如果回答既不是Y也不是N则,提示错误,返回菜单界面
break;
}
}
}
/*---------------------------------------modify-----------------------------------------------*/
//函数名称:
modify
//函数功能:
根据设备号,修改设备信息
//函数说明:
参数为链表头结点指针,输入设备号,修改对应设备号的设备信息,没有输出
/*--------------------------------------------------------------------------------------------*/
voidmodify(SB*head)
{
SB*p;
intmaxday;
charch,ch1;
while
(1){
p=head->next;
if(p==NULL){
printf("设备信息数据库为空!
请选择其他操作...\n");//检查数据库是否为空,再查找设备号
break;
}
else{
printf("请输入要修改的设备号:
");
p=numfind(head);
if(p!
=NULL){//找到设备号对应结点,修改信息
show(p);//显示p便于修改
printf("请输入修改后的设备信息:
\n\n");
printf("请输入设备名称:
");
scanf("%s",&p->name);
printf("请输入购买日期(格式:
0000-00-00):
");
while
(1){//方便输入错误以后重新输入
scanf("%d-%d-%d",&p->buydate.year,&p->buydate.month,&p->buydate.day);
maxday=date_check(p->buydate.year,p->buydate.month);
if(p->buydate.month>12||p->buydate.day>maxday)
printf("\n日期输入错误!
请重新输入:
");//月份超出1~12或者日期超出1~31则提示错误
elsebreak;//格式正确,跳出当前循环,继续输入其他信息
}
printf("请输入设备价格:
");
while
(1){//方便输入错误以后重新输入
scanf("%ld",&p->price);
if(p->price<0)printf("\n价格不能小于0,请重新输入:
");//价格小于0报错
elsebreak;//格式正确,跳出while循环,继续输入其他信息
}
printf("请输入设备生产厂家:
");
scanf("%s",&p->adress);
printf("请输入使用部门:
");
scanf("%s",&p->department);
ch1=getchar();
printf("\n修改成功!
\n");
}
}
printf("\n是否继续修改?
(Y/N)");//提示是否继续
ch=getchar();
if((ch=='N')||(ch=='n'))break;//如果回答n或N,则跳出while循环
elseif((ch!
='Y')&&(ch!
='y'))
{
printf("\n输入错误!
");//如果回答既不是Y也不是N则,提示错误,返回菜单界面
break;
}
}
}
/*---------------------------------------del--------------------------------------------------*/
//函数名称:
del
//函数功能:
根据设备号,删除设备信息
//函数说明