/*
Name:
STU类型定义
Description: 定义一个STU类型,定义一个最大的可处理的人数N
Modify Date:
*/
#if !defined(kerwss)
#define kerwss
123
#define N 200
struct equipmentInfo
{
int
no
;
//设备序号
char equipcode[10];
//设备编号
char equiptype[20];
//设备总类
char equipname[20]; //设备名称
float equipprice;
//设备价格
char buydate[20];
//设备购入日期
int
scrap;
//是否报废,0表示没有报废,1表示报废
char scrapdate[20];
//报废日期
};
typedef struct equipmentInfo STU;//自定义一个类型
#endif
/*
Name:
查询操作
Description:
Modify Date:
*/
#include "stdio.h"
#include "stu.h"
#include "stdlib.h"
extern void showall();
extern void show(int i);
extern void showhead();
extern int peo;
extern STU stu[N];
void showname(){
int i,j,k,flag=1;
char equipname[15];
printf("请输入查询的名字:");
scanf("%s",equipname);
showhead();
for(i=0;i<peo;i++)
for(j=0;stu[i].equipname[j]!=0;j++){
for(k=0;equipname[k]!=0;k++)
if(stu[i].equipname[j+k]!=equipname[k])break;
if(equipname[k]==0){flag=0;show(i);break;}
}
if(flag)printf("查无此人......\n");
system("pause");
}
void query(){
int c;
while(1){//查询菜单,有按全部、姓名、序号查询
if(peo==0)
{
printf("为空,不能查询,");
system("pause");
return;
}
system("cls");
printf("\n\n********************查询子功能菜单*********************\n");
printf("\n
1.全部记录\n");
printf("
2.按姓名\n");
printf("
3.按序号\n");
printf("
4.返回上一级\n\n");
printf("********************查询子功能菜单*********************\n");
printf("
请输入数字(1~4)选择相应的功能:");
scanf("%d",&c);
switch(c){
case 1:showall();break;
case 2://按姓名查询
showname();
break;
case 3:
printf("请输入查询的序号(1~%d):",peo);
scanf("%d",&c);
if(c<=0 ||c>peo)printf("输入的序号有误......\n");
else{
showhead();
show(c-1);
}
system("pause");
break;
case 4:return;
default:
printf("请输入正确的选项,");
system("pause");
}
}
}
/*
Name:
修改操作
Description:
Modify Date:
*/
#include "stdio.h"
#include "stu.h"
#include "stdlib.h"
#include "string.h"
extern void show(int i);
extern void showhead();
extern void
writestu();
extern int peo;
extern STU stu[N];
void sortstu(){//按姓名排序,并重新安排序号
STU tmp;
int i,j,flag=1;
for(i=0;i<peo-1&& flag;i++)
{
flag=0;
for(j=0;j<peo-1-i;j++)//冒泡排序
if(strcmp(stu[j].equipname,stu[j+1].equipname)>0){
tmp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=tmp;
flag=1;
}
stu[peo-1-i].no=peo-i;//每次冒泡后,重新编号
}
stu[0].no=1;//第一个元素的序号为1
}
void modify(int i){
int c;
char s[31];
int y;
float
b;
int flag=0;
while(1){
if(peo==0)
{
printf("为空,不能修改,");
system("pause");
return;
}
printf("选择要修改的内容\n");
printf(" 1.设备编号 2.设备总类 3.设备名称 4.设备价格 5.购入日期 6.是否报废 7.报废日期 8.结束并保存 9.结束不保存\n请输入操作的序号:");
scanf("%4d",&c);
switch(c){
case 1://修改设备编号
printf("请输入设备编号(1~10数字):");
scanf("%s",s);
strcpy(stu[i].equipcode ,s);
printf("已修改!\n");
break;
case 2://修改设备总类
printf("请输入设备总类(1~20个汉字)");
scanf("%s",s);
strcpy(stu[i].equiptype ,s);
printf("已修改!\n");
break;
case 3://修改设备名称
printf("请输入设备名称(1~20个汉字):");
scanf("%s",s);
strcpy(stu[i].equipname ,s);
printf("已修改!\n");
flag=1;
break;
case 4://修改设备价格
printf("请输入设备价格(yuan):");
scanf("%f",&b);
stu[i].equipprice =b;
printf("已修改!\n");
break;
case 5://修改购入日期
printf("请输入设备购入日期(年 月 日1~20个汉字:");
scanf("%s",s);
strcpy(stu[i].buydate ,s);
printf("修改成功!\n");
break;
case 6:///修改是否报废
printf("请输入是否报废(0表示没有报废,1表示报废:");
scanf("%d",&y);
stu[i].scrap =y;
printf("已修改!\n");
break;
case 7://修改报废日期
printf("请输入报废日期(年 月 日1~20个汉字:");
scanf("%s",s);
strcpy(stu[i].scrapdate ,s);
printf("修改成功!\n");
break;
case 8://结束修改之前,要排序,写到数据文件中
if(flag)sortstu();//如果姓名修改了,需要重新排序stu
//可以不用冒泡排序,只是这一个记录无序,可用其他方法
//需要优化
writestu();//写文件,这个函数定义 在add.cpp中
return;
case 9:
return;
default:
printf("请输入正确的选项,");
system("pause");
}
}
}
void modino(){//按序号修改
int no;
printf("请输入修改的记录序号(1~%d):",peo);
do{
scanf("%d",&no);
if(no>peo||no<=0)
printf("输入的序号不存在,请重新输入序号(1~%d):",peo);
}while(no>peo||no<=0);
showhead();//显示表头
show(no-1);//显示记录
modify(no-1);//修改stu[no-1]中的数据
}
void modiequipname(){//输入设备名称,找到记录,修改
char equipname[11];
int i=0,j=peo-1,k,flag=0;
printf("请输入修改记录的姓名(1~5个汉字,输入0,返回上一级菜单):");
do{
scanf("%s",equipname);
//在stu数组中,折半查找与equipname完全相同的记录
if(strcmp(equipname,"0")==0)return;
do{
k=(i+j)/2;
if(strcmp(stu[k].equipname,equipname)==0){flag=1;break;}//找到,flag=1,结束循环
else if(strcmp(stu[k].equipname,equipname)>0)j=k-1;
else i=k+1;
}while(i<=j);
if(flag==0)//没有找到
printf("%s 不存在,请重新输入设备名称(1~5个汉字,输入0,返回上一级菜单):",equipname);
}while(flag==0);
showhead();//显示表头
show(k);//显示记录
modify(k);
}
void modi(){//修改主菜单
int c;
while(1){
if(peo==0)
{
printf("为空,不能修改了,");
system("pause");
return;
}
system("cls");
printf("\n\n********************修改子功能菜单*********************\n");
printf("\n
1.按序号修改\n");
printf("
2.按设备名称修改\n");
printf("
3.返回上一级\n\n");
printf("********************修改子功能菜单*********************\n");
printf("
请输入数字(1~3)选择相应的功能:");
scanf("%d",&c);
switch(c){
case 1:
modino();//输入序号修改
break;
case 2:
modiequipname();//输入设备名称修改
break;
case 3:return;
default:
printf("请输入正确的选项,");
system("pause");
}
}
}
/*
Name:
menu菜单函
Description: 这是一个菜单,通过输入1~6来选择相应的函数,
完成相应的操作
Modify Date:
*/
#include "stdio.h"
#include "stdlib.h"
extern void add();
extern void query();
extern void modi();
//extern void delet();
extern void classfy();
void menu(){//主菜单函数
int c;
while(1){
system("cls");
printf("\n\n\n");
printf("************* 通迅录管理系统主菜单
**************\n\n");
printf("
1.实验设备信息输入\n");
printf("
2.实验设备信息添加\n");
printf("
3.实验设备信息修改\n");
printf("
4.实验设备分类统计\n");
printf("
5.实验设备查询\n\n");
printf("
6.退
出\n\n");
printf("************* 通迅录管理系统主菜单
**************\n");
printf("
请输入的数字(1~6),选择您的操作:");
scanf("%d",&c);
switch(c){
case 1:
//
input();
//实验设备信息输入
break;
case 2:
add();
//实验设备信息添加
break;
case 3:
modi();//实验设备信息修改
break;
case 4:
classfy();//实验设备分类统计
break;
case 5:
query();//实验设备查询
break;
case 6:
return ;
default:
printf("请输入正确的选项,");
system("pause");
}
}
}