Hello,大家好我是慢慢努力的小刘。今天终于更新了,这次更新的内容是我大一的时候写的C语言高级程序课设,那时候刚学完C语言可能语法或者是功能的实现有些复杂,如果大家有更好的想法和建议,欢迎大家在评论区交流。
一、实训题目与要求:
1.1 问题描述:
请设计一个设备管理程序,以方便资产科对本单位的设备进行管理,设计一程序完成以下功能:
(1)能从键盘输入设备信息 。
(2)指定设备号,显示设备信息。
(3)指定部门名称,显示该部门所使用的设备。
(4)给定设备号,修改设备的信息。
(5)给定设备号,删除设备信息。
1.2 题目要求:
(1)按照分析、设计、编码、调试、测试的软件过程完成这个应用程序。
(2)设备信息包括:设备号、设备名称、购买日期、价格、生产厂家、使用部门。
(3)为各项操作功能设计一个菜单,应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。
1.3 输入要求:
(1)应用程序运行后在屏幕上显示一个菜单。用户可以根据需求,选定相应的操作项目。进入每个操作后,根据应用程序的提示信息,从键盘输入相应的信息。程序根据用户输入的信息完成相应的处理,实现要求的功能。
(2)能对输入的数据进行简单的校验,例如,购买日期必须是一个合法的日期格式,设备号是唯一的(一个设备号对应一个设备的设备信息)。
1.4 输出要求:
(1)应用程序运行后,要在屏幕上显示一个菜单
(2)要求用户输入数据时,给出清晰、明确的提示信息,包括输入的数据内容、格式以及结束方式等。
(3)在程序完成处理后,要清楚地给出程序的处理结果。例如,在给定设备号删除设备信息时,如果该设备不存在,要提示没能删除,如果删除成功要提示删除成功。
1.5 实现要求:
(1)在程序中使用链表存储设备信息。
(2)采用模块化程序设计的方法,将程序中的各项功能用函数实现。
1.6 提示:
(1)使用结构体表示设备信息,一个结点保存一条设备信息
扩展功能:
(1)提供一些统计功能。例如统计每种设备的总数(按照设备名称),统计每个部门使用的设备总数。
(2)设备信息从文件读入。
(3)将设备信息保存到文件中。
二 、系统设计
2.1 系统功能模块划分
1. 系统功能模块划分设计说明
(1)、添加设备信息
所使用的函数:void createlist();
(2)、指定设备号,通过设备号来查询设备信息
所使用的函数:void showdata();
(3)、指定部门名称,显示该部门所使用的设备
所使用的函数:void Bshowdata();
(4)、给定设备号,修改设备的信息
所使用的函数:void modify ();
(5)、给定设备号,删除设备信息
所使用的函数:void deletenode ();
(6)、显示所有设备信息
所使用的函数:void Pshowdata()
(7)、释放设备信息链表
所使用的函数:void freeList ();
(8)、增加设备的个数;
所使用的函数:void add_data()
(9)、统计每个部门使用的设备总数
所使用的函数:find_bmshebeishu();
(10)、计每种设备的总数(按照设备名称)
所使用的函数:void find_sbzongshu()
2.2 系统功能模块图
(1)能从键盘 和从文件中输入设备信息 。
(2)指定设备号,显示设备信息。
(3)指定部门名称,显示该部门所使用的设备。
(4)给定设备号,修改设备的信息。
(5)给定设备号,删除设备信息。
(6)显示所有设备信息。
(7)添加设备的信息
(8)统计设备的种类(按名称)和每个部门使用设备的个数
2.3 数据结构设计
结构体、链表的设计说明
typedef struct facility
{
char no[20];设备号
char name[10];设备名称
char cj[20];生产厂家
char bm[20];使用部门
int jg;购买价格
int year;
int month;
int day;
struct facility *next;
}STU;
设备号p->no
设备名称p->name
购买价格&p->jg
生产厂家p->cj
使用部门p->bm
&p->year ,&p->month, &p->day 购买日期
三 、上代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>
#include<stdlib.h>
typedef struct facility
{
char no[20];
char name[10];
char cj[10];
char bm[10];
char jg[10];
int year;
int month;
int day;
struct facility *next;
}STU;
STU head;
STU *p,*tail=&head;
STU* findnode(char *no);//查找设备信息的结点
STU* find(char *bm);//查找设备信息部门的节点;
int getindex(char *no); //获取存放设备信息的节点序号;
void showmenu();//1显示菜单
void showdata();//3通过设备号来查询设备信息;
void createlist();//3数据的输入
void modify();//4修改设备信息
void deletenode();//删除设备信息
void freelist();//6释放节点
void Pshowdata();//7设备信息的输出
void Bshowdata();//8查找使用部门
void sbshowmenu();//9修改菜单
void segister();//10登陆函数;
void createfile();//11通过文件来输入数据
void createkeyboard();//12通过键盘来输入设备信息
void printfscreen();//13数据输到屏幕
void printffile();//14数据输到文件中;
void tongji();//15统计设备的个数
void find_sbzongshu();//16统计每种设备的总数(按照设备名称)
void find_bmshebeishu();//17统计每个部门使用的设备总数
void add_data();//18增加设备的个数;
//主函数;
int main()
{
int select;
head.next=NULL;
//segister();
while(1)
{
showmenu();
printf("请选择需要的操作:");
scanf("%d",&select);
fflush(stdin);
switch(select)
{
case 1:createlist();break;//设备信息的输入;
case 2:showdata();break;//
case 3:Bshowdata();break;
case 4:modify();break;
case 5:deletenode();break;
case 6:Pshowdata();break;
case 7:tongji();break;
case 8:add_data();break;
case 0:freelist();exit(0);
default:printf("输入错误!\n");
}
system("pause");
}
return 0;
}
void segister()
{
char user[10],passward[10];//分别储存用户名和密码;
int count=1;
while(count<=3)
{
printf("你的用户名\n");
gets(user);
printf("请输入你的密码\n");
gets(passward);
if(strcmp(user,"202002386")==0&&strcmp(passward,"123456")==0)
{
printf("登陆成功\n");
sleep(1);
break;
}
if(count==3)
{
exit(0);
}
else
{
printf("\t 账号或密码错误\n");
printf("\t 你还有%d次机会,请再次输入账号密码!\n",3-count);
count++;
}
}
return;
}
STU* findnode(char *no)//查找设备信息的结点
{
STU *p;
p=head.next;
while(p!=NULL)
{
if(strcmp(p->no,no)==0)break;
p=p->next;
}
return p;
}
STU* find(char *bm)//查找设备信息部门的节点;
{
STU *p;
p=head.next;
while(p!=NULL)
{
if(strcmp(p->bm,bm)==0)break;
p=p->next;
}
return p;
}
int getindex(char *no)//获取存放设备信息的节点序号;
{
int index=1;
STU *p;
p=head.next;
while(p!=NULL)
{
if(strcmp(p->no,no)==0)break;
p=p->next;
index++;
}
if(p==NULL)
return 0;
else
return index;
}
void showmenu()
{
system("cls");
printf("------------------------------\n");
printf("*******设备信息管理系统*******\n");
printf("------------------------------\n");
printf("\t 1.输入设备信息\n");
printf("\t 2.指定设备号,显示设备信息\n");
printf("\t 3.给定使用部门名称,显示该设备信息\n");
printf("\t 4.给定设备号,修改该设备信息\n");
printf("\t 5.给定设备号,删除该设备的信息\n");
printf("\t 6.显示所有的设备信息\n");
printf("\t 7.统计设备的种类\n");
printf("\t 8.通过键盘来增加设备个数\n");
printf("\t 0.退出\n");
printf("------------------------------\n");
printf(" 作者:刘春林\n");
printf(" All rights reserved\n");
printf("------------------------------\n");
printf(" 你的选择:");
return;
}
void sbshowmenu()//修改菜单,
{
//system("cls");
printf("*****选择修改的设备信息*****\n");
printf("1.修改设备号\n");
printf("2.修改设备名称\n");
printf("3.修改购买价格\n");
printf("4.修改使用部门\n");
printf("5.修改生产厂家\n");
printf("6.修改购买日期\n");
printf("0.放弃修改\n");
return;
}
void createlist()//1:数据的输入
{
int select;
printf("请选择数据输入的方式\n");
printf("1:以文件方式导入\n");
printf("2:从键盘上输入\n");
printf("3:返回上一步\n");
scanf("%d",&select);
switch(select)
{
case 1:createfile();break;
case 2:createkeyboard();break;
case 3:return;
defaul:printf("选择错误!\n");
}
return;
}
void createfile()//从文件中输入
{
int i;//i是循环变量;
int n;//是输入设备的个数;
STU *p,*tail;//定义两个链表指针变量
FILE *fp;//定义一个文件指针;
fp=fopen("e:\\data.txt","r"); //打开文件;
if(head.next!=NULL)
{
printf("设备的数据的链表已经建立\n");
return;
}
printf("您以选择以文件的方式输入数据\n");
printf("请输入设备的个数\n");
tail=&head;//指向头文件;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
p=(STU*)malloc(sizeof(STU));//新建立一个结点;
if(p==NULL)
{
printf("内存分配失败!\n");
return;
}
fscanf(fp,"%s%s%s%s%s",p->no,p->name,p->cj,p->bm,p->jg);
fscanf(fp,"%d-%d-%d",&p->year,&p->month,&p->day);
tail->next=p;
p->next=NULL;
tail=p;
}
fclose(fp);//关闭文件;
printf("设备数据输入成功\n");
return;
}
void createkeyboard()//从键盘中输入
{
int i,n,j,n1;
char no[20],select;
STU *p2,*p,*tail;
printf("您以选择以文件的方式输入数据\n");
tail=&head;//指向头文件;
while(1)
{
printf("请输入设备信息:\n");
p=(STU*)malloc(sizeof(STU));
if(p==NULL)
{
printf("建立链表时内存分配失败!\n");
return;
}
do
{
j=1;
p2=head.next;
printf("输入7位设备号:");
scanf("%s",no);
fflush(stdin);
if(strlen(no)!=7)
{
printf("设备号错误,请重新输入!\n");
j=0;
continue;
}
while(p2!=NULL)
{
if(strcmp(p2->no,no)==0)
{
printf("设备号重复,请重新输入!\n");
j=0;
break;
}
p2=p2->next;
}
}while(j!=1);
strcpy(p->no,no);
printf("设备号正确,请输入其他信息!\n");
printf("请输入设备名称:\n");
scanf("%s",p->name);
fflush(stdin);
printf("请输入生产厂家:\n");
scanf("%s",p->cj);
printf("请输入使用部门:\n");
scanf("%s",p->bm);
printf("请输入购买价格:\n");
scanf("%s",p->jg);
n1=atoi(p->jg);
while(1)
{
if(n1<=0)
{
printf("价格输入不合理,请重新输入:\n");
scanf("%s",p->jg);
n1=atoi(p->jg);
}
else
{
break;
}
}
printf("请输入购买年份:\n");
scanf("%d",&p->year);
while(1)
{
if(p->year<1970||p->year>2021)
{
printf("年份不合理,请重新输入:\n");
scanf("%d",&p->year);
}
if(p->year>1969&&p->year<2022)
{
break;
}
}
printf("请输入购买月份:\n");
scanf("%d",&p->month);
while(1)
{
if(p->month<1||p->month>12)
{
printf("月份不合理,请重新输入:\n");
scanf("%d ",&p->month);
}
if(p->month>0&&p->month<13)
{
break;
}
}
printf("请输购买日期:\n");
scanf("%d",&p->day);
if(p->month==1||p->month==3||p->month==5||p->month==7||p->month==8||p->month==10||p->month==12)
{
while(1)
{
if(p->day<1||p->day>31)
{
printf("日期不合理,请重新输入: \n");
scanf("%d",&p->day);
}
if(p->day>0&&p->day<32)
{
break;
}
}
}
if(p->month==4||p->month==6||p->month==9||p->month==11)
{
while(1)
{
if(p->day<1||p->day>30)
{
printf("日期不合理,请重新输入 \n");
scanf("%d",&p->day);
}
if(p->day>0&&p->day<31)
{
break;
}
}
}
if(p->month==2)
{
if((p->year%4==0&&p->year%100!=0)||(p->year%400==0))
{
while(1)
{
if(p->day<1||p->day>29)
{
printf("日期不合理,请重新输入\n");
scanf("%d",&p->day);
}
if(p->day>0&&p->day<30)
{
break;
}
}
}
else
{
while(1)
{
if(p->day<1||p->day>28)
{
printf("日期不合理,请重新输入\n");
scanf("%d",&p->day);
}
if(p->day>0&&p->day<29)
{
break;
}
}
}
}
tail->next=p;
p->next=NULL;
tail=p;
fflush(stdin);
printf("是否继续添加设备信息(y/n或者Y/N)?\n");
select=getchar();
if(select=='N'||select=='n')
{
break;
}
}
return;
}
void showdata()// 通过设备号来查询设备信息;
{
char no[20];
STU *p;
printf("请输入需要查询的设备号:\n");
gets(no);
p=findnode(no);
if(p==NULL)
{
printf("设备信息不存在!\n");
return;
}
else
{
printf("设备信息如下:\n");
printf("-------------------------------------------------------------------------------------------------------------\n");
printf("设备号-----设备名称--------设备厂家---------设备部门-------------设备价格------------购入时间 \n");
printf("--------------------------------------------------------------------------------------------------------------\n");
printf("%5s %-5s %-10s %-8s %-8s %-5d-%d-%d\n",p->no,p->name,p->cj,p->bm,p->jg,p->year,p->month,p->day);
printf("------------------------------------------------------------------------------------------------------------\n");
}
return;
}
void Pshowdata()//显示所有设备信息
{
int select;
STU *p;
p=head.next;
if(head.next==NULL)
{
printf("未创建设备信息链表!\n");
return;
}
printf("请选择数据输出的方式:\n");
printf("1:把数据直接输出到屏幕上\n");
printf("2:把数据存到文件中\n");
scanf("%d",&select);
switch(select)
{
case 1:printfscreen();break;
case 2:printffile();break;
defaul:printf("选择错误!\n");
}
return;
}
void printfscreen()
{
STU *p;
p=head.next;
if(head.next==NULL)
{
printf("未创建链表!\n");
return;
}
printf("该设备信息如下\n");
printf("--------------------------------------------------------------------\n");
printf("设备号 设备名称 购买厂家 部门 价格 时间 \n");
printf("--------------------------------------------------------------------\n");
while(p!=NULL)
{
printf("%s %-10s%-10s%-10s%-10s %-5d-%d-%d\n",p->no,p->name,p->cj,p->bm,p->jg,p->year,p->month,p->day);
printf("--------------------------------------------------------------------\n");
p=p->next;
}
return;
}
void printffile()
{
STU *p;
FILE *fp;
fp=fopen("e:\\answer.txt","w");//打开文件;
p=head.next;
if(head.next==NULL)
{
printf("未创建链表!\n");
return;
}
while(p!=NULL)
{
fprintf(fp,"%-10S %-10s%-10S%-10S%-10s %-5d-%d-%d\n",p->no,p->name,p->cj,p->bm,p->jg,p->year,p->month,p->day);
p=p->next;
}
fclose(fp);//关闭文件;
printf("导入文件data.txt成功!\n");
return;
}
void Bshowdata()//通过部门名称来查询设备信息;
{
char bm[10];
int i=0,select;
STU *p;
if(head.next==NULL)
{
printf("未创建设备信息链表!\n");
return;
}
while(1)
{
printf("请输入需要查询的部门:\n");
gets(bm);
p=head.next;
while(p!=NULL)
{
if(strcmp(p->bm,bm)==0)
{
printf("设备号;%s\n",p->no);
printf("设备名称;%s\n",p->name);
printf("购买价格;%s\n",p->jg);
printf("使用部门;%s\n",p->bm);
printf("生产厂家;%s\n",p->cj);
printf("购买时间;%d-%d-%d\n",p->year,p->month,p->day);
i++;
}
p=p->next;
}
if(i==0)
{
printf("部门不存在!\n");
fflush(stdin);
return;
}
else
{
printf("\n使用的设备总数为%d 个\n\n",i);
}
fflush(stdin);
printf("是否继续查询设备信息(y/n或者Y/N)?\n");
select=getchar();
if(select=='N'||select=='n')
{
break;
}
}
return;
}
void modify()
{
STU *p,*p2;
int j,sele,n1;
char no[20];
if(head.next==NULL)
{
printf("未创建设备信息链表!\n");
return;
}
printf("请输入需要修改的设备号:");
gets(no);
p=findnode(no);
if(p==NULL)
{
printf("设备信息不存在\n");
return;
}
printf("该设备的信息为:\n");
printf("设备号;%s\n",p->no);
printf("设备名称;%s\n",p->name);
printf("购买价格;%s\n",p->jg);
printf("使用部门;%s\n",p->bm);
printf("生产厂家;%s\n",p->cj);
printf("购买时间;%d-%d-%d\n",p->year,p->month,p->day);
sbshowmenu();
while(1)
{
printf("请选择需要的操作:");
scanf("%d",&sele);
if(sele==0)
{
return;
}
if(sele==1)
{
printf("请输入修改过后的信息:");
do{
j=1;
p2=head.next;
printf("输入7位设备号:");
scanf("%s",no);
fflush(stdin);
if(strlen(no)!=7)
{
printf("设备号错误,请重新输入!\n");
j=0;
continue;
}
while(p2!=NULL)
{
if(strcmp(p2->no,no)==0)
{
printf("设备号重复,请重新输入!\n");
j=0;
break;
}
p2=p2->next;
}
}while(j!=1);
strcpy(p->no,no);
printf("设备号正确!\n");
}
if(sele==2)
{
printf("请输入设备名:");
scanf("%s",p->name);
}
if(sele==3)
{
printf("请输入购买价格:");
scanf("%s",p->jg);
n1=atoi(p->jg);
while(1)
{
if(n1<=0)
{
printf("价格输入不合理,请重新输入:\n");
scanf("%s",p->jg);
n1=atoi(p->jg);
}
else
{
break;
}
}
}
if(sele==4)
{
printf("请输入使用部门:");
scanf("%s",p->bm);
}
if(sele==5)
{
printf("请输入生产厂家:");
scanf("%s",p->cj);
}
if(sele==6)
{
printf("请重新输入:\n");
printf("请输入购买年份:");
scanf("%d",&p->year);
while(1)
{
if(p->year<1970||p->year>2021)
{
printf("年份不合理,请重新输入:");
scanf("%d",&p->year);
}
if(p->year>1969&&p->year<2022)
{
break;
}
}
printf("请输入购买月份:");
scanf("%d",&p->month);
while(1)
{
if(p->month<1||p->month>12)
{
printf("月份不合理,请重新输入:");
scanf("%d",&p->month);
}
if(p->month>0&&p->month<13)
{
break;
}
}
printf("请输购买日期:");
scanf("%d",&p->day);
if(p->month==1||p->month==3||p->month==5||p->month==7||p->month==8||p->month==10||p->month==12)
{
while(1)
{
if(p->day<1||p->day>31)
{
printf("日期不合理,请重新输入:");
scanf("%d",&p->day);
}
if(p->day>0&&p->day<32)
{
break;
}
}
}
if(p->month==4||p->month==6||p->month==9||p->month==11)
{
while(1)
{
if(p->day<1||p->day>30)
{
printf("日期不合理,请重新输入");
scanf("%d",&p->day);
}
if(p->day>0&&p->day<31)
{
break;
}
}
}
if(p->month==2)
{
if((p->year%4==0&&p->year%100!=0)||(p->year%400==0))
{
while(1)
{
if(p->day<1||p->day>29)
{
printf("日期不合理,请重新输入");
scanf("%d",&p->day);
}
if(p->day>0&&p->day<30)
{
break;
}
}
}
while(1)
{
if(p->day<1||p->day>28)
{
printf("日期不合理,请重新输入");
scanf("%d",&p->day);
}
if(p->day>0&&p->day<29)
{
break;
}
}
}
}
printf("修改成功!\n");
fflush(stdin);
printf("是否继续修改设备信息(y/n或者Y/N)?\n");
sele=getchar();
if(sele=='N'||sele=='n')
{
return;
}
}
}
void deletenode()//给定设备号,删除设备信息
{
int n,i;
char no[20],select;
STU *p,*pre;
if(head.next==NULL)
{
printf("未创建设备信息链表!\n");
return;
}
printf("请输入需要删除的设备的设备号:\n");
gets(no);
n=getindex(no);
if(n==0)
{
printf("设备信息不存在!\n");
return;
}
pre=&head;
for(i=1;i<=n-1;i++)
{
pre=pre->next;
}
p=pre->next;
printf("该设备的信息为:\n");
printf("设备号: %s\n",p->no);
printf("设备名称: %s\n",p->name);
printf("购买价格: %s\n",p->jg);
printf("使用部门: %s\n",p->bm);
printf("生产厂家: %s\n",p->cj);
printf("购买时间: %d-%d-%d\n",p->year,p->month,p->day);
fflush(stdin);
printf("是否确认删除(Y/N)?\n");
select=getchar();
if(select=='Y'||select=='y')
{
if(p->next!=NULL)
{
pre->next=p->next;
free(p);
printf("删除成功!\n");
}
else
{
pre->next=NULL;
free(p);
printf("删除成功!\n");
}
}
if(select=='N'||select=='n')
{
printf("删除取消!\n");
}
return;
}
void freelist()//释放节点;
{
STU *p;
p=head.next;
while(p!=NULL)
{
head.next=p->next;
free(p);
p=head.next;
}
printf("\n设备信息已全部删除!\n");
return;
}
void add_data()
{
int add,i,j,count=0,n1,f=0;
STU *p,*p2,*a;
if(head.next==NULL)
{
printf("未创建链表!\n");
return;
}
a=head.next;
system("cls");
printf("******您已选择通过键盘添加数据******\n");
printf("请输入需要添加的个数:");
scanf("%d",&add);
while(a!=NULL)
{
count++;
a=a->next;
}
a=head.next;//再次指向头节点;
for(i=1;i<=count-1;i++)//这不是为了指向最后一个节点前的那个next;
{
a=a->next;
}
for(i=1;i<=add;i++)
{
while(1)
{
f=0;
printf("请输入设备信息:\n");
p=(STU*)malloc(sizeof(STU));
if(p==NULL)
{
printf("建立链表时内存分配失败!\n");
return;
}
do
{
j=1;
p2=head.next;
printf("输入7位设备号:");
scanf("%s",p->no);
fflush(stdin);
if(strlen(p->no)!=7)
{
printf("设备号错误,请重新输入!\n");
j=0;
continue;
}
while(p2!=NULL)
{
if(strcmp(p2->no,p->no)==0)
{
printf("设备号重复,请重新输入!\n");
j=0;
break;
}
p2=p2->next;
}
}while(j!=1);
strcpy(p->no,p->no);
printf("设备号正确,请输入其他信息!\n");
printf("请输入设备名称:");
scanf("%s",p->name);
fflush(stdin);
printf("请输入生产厂家:");
scanf("%s",p->cj);
printf("请输入使用部门:");
scanf("%s",p->bm);
printf("请输入购买价格:");
scanf("%s",p->jg);
n1=atoi(p->jg);
while(1)
{
f=0;
if(n1<=0)
{
printf("价格输入不合理,请重新输入:\n");
f=1;
scanf("%s",p->jg);
n1=atoi(p->jg);
}
else
{
break;
}
}
printf("请输入购买年份:");
scanf("%d",&p->year);
while(1)
{
f=0;
if(p->year<1970||p->year>2021)
{
printf("年份不合理,请重新输入:");
f=1;
scanf("%d",&p->year);
}
if(p->year>1969&&p->year<2022)
{
break;
}
}
printf("请输入购买月份:");
scanf("%d",&p->month);
while(1)
{
f=0;
if(p->month<1||p->month>12)
{
printf("月份不合理,请重新输入:");
f=1;
scanf("%d ",&p->month);
}
if(p->month>0&&p->month<13)
{
break;
}
}
printf("请输购买日期:");
scanf("%d",&p->day);
if(p->month==1||p->month==3||p->month==5||p->month==7||p->month==8||p->month==10||p->month==12)
{
while(1)
{
f=0;
if(p->day<1||p->day>31)
{
printf("日期不合理,请重新输入:");
f=1;
scanf("%d",&p->day);
}
if(p->day>0&&p->day<32)
{
break;
}
}
}
if(p->month==4||p->month==6||p->month==9||p->month==11)
{
while(1)
{
f=0;
if(p->day<1||p->day>30)
{
printf("日期不合理,请重新输入");
f=-1;
scanf("%d",&p->day);
}
if(p->day>0&&p->day<31)
{
break;
}
}
}
if(p->month==2)
{
if((p->year%4==0&&p->year%100!=0)||(p->year%400==0))
{
while(1)
{
f=0;
if(p->day<1||p->day>29)
{
printf("日期不合理,请重新输入");
f=1;
scanf("%d",&p->day);
}
if(p->day>0&&p->day<30)
{
break;
}
}
}
else
{
while(1)
{
f=0;
if(p->day<1||p->day>28)
{
printf("日期不合理,请重新输入");
f=1;
scanf("%d",&p->day);
}
if(p->day>0&&p->day<29)
{
break;
}
}
}
}
if(f==0)
{
a->next=p;
p->next=NULL;
a=p;
break;
}
}
}
printf("输入成功!\n");
return;
}
void tongji()//增加设备的个数;
{
int select;
printf("请输入你选择统计的内容\n");
printf("1:每种设备的总数(按照设备名称)\n");
printf("2:每个部门使用的设备总数\n");
printf("3:返回上一步\n");
scanf("%d",&select);
switch(select)
{
case 1:find_sbzongshu();break;
case 2:find_bmshebeishu();break;
case 3:return;
defaul:printf("选择错误!\n");
}
return;
}
void find_sbzongshu()//统计每种设备的总数(按照设备名称)
{
int i,j,len=0,n=0;
int a[10000]={0},count[10000]={0};
char str[10][10000];
STU *p,*pi,*pj,*pre;
p=head.next;
pi=head.next;
pj=head.next;
pre=head.next;
while(p!=NULL)
{
n++;
p=p->next;
}
for(i=0;i<n;i++)
{
pj=head.next;
for(j=0;j<n;j++)
{
if(strcmp(pi->name,pj->name)==0&&a[i]!=1&&i!=j)
{
a[j]=1;
}
pj=pj->next;
}
pi=pi->next;
}
for(i=0;i<n;i++)
{
if(a[i]==0)
{
strcpy(str[len],pre->name);
len++;
}
pre=pre->next;
}
pre=head.next;
for(i=0;i<len;i++)
{
pre=head.next;
for(j=0;j<n;j++)
{
if(strcmp(str[i],pre->name)==0)
{
count[i]++;
}
pre=pre->next;
}
printf("%s有%d个\n",str[i],count[i]);
}
}
void find_bmshebeishu()
{
int i,j,len=0,n=0;
int a[10000]={0},count[10000]={0};
char str[10][10000];
STU *p,*pi,*pj,*pre;
p=head.next;
pi=head.next;
pj=head.next;
pre=head.next;
while(p!=NULL)
{
n++;
p=p->next;
}
for(i=0;i<n;i++)
{
pj=head.next;
for(j=0;j<n;j++)
{
if(strcmp(pi->bm,pj->bm)==0&&a[i]!=1&&i!=j)
{
a[j]=1;
}
pj=pj->next;
}
pi=pi->next;
}
for(i=0;i<n;i++)
{
if(a[i]==0)
{
strcpy(str[len],pre->bm);
len++;
}
pre=pre->next;
}
pre=head.next;
for(i=0;i<len;i++)
{
pre=head.next;
for(j=0;j<n;j++)
{
if(strcmp(str[i],pre->bm)==0)
{
count[i]++;
}
pre=pre->next;
}
printf("%s有%d个\n",str[i],count[i]);
}
}
四、实训报告
在我主页下载或者私信我。
五、总结
今天又是周一了,新的一周开始了,大家一起努力、一起加油!最后如果对家有帮助,那就请大家动动小手点点赞和关注吧!