```c
#include <stdio.h>
#include<string.h>
#include <stdlib.h>
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable : 4996)
#pragma warning(disable : 6031)
#define LEN sizeof(struct equipment)
#pragma execution_character_set("gbk")
char path[100] = "E://大学/大二/下/算法报告/real device/equ.txt";
//设备信息结构体
struct equipment
{
int num;//编号
char name[5];//设备名称
char clas[10];//数量
char price[8];//价格
char buy_date[15];//购买日期
char maintain_date[15];//最近一次维修日期
};
struct equipment equ[50];
//系统操作
void menu()
{
printf("\n\n\n");
printf("\t\t-------------------------------------------------\n");
printf("\t\t|| ---------------- ||\n");
printf("\t\t||**************设备信息管理系统***************||\n");
printf("\t\t|| ---------------- ||\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||~~~~~~~~~~~~~~~6.清屏~~~~~~~~~~~~~~~~~~~~~~~~||\n");
printf("\t\t|| ||\n");
printf("\t\t||*********************************************||\n");
}
//录入设备信息
void in()
{
FILE* fp;
int i, m = 0;
char ch[3];
ch[2]=0;
if ((fp = fopen(path, "r")) == NULL)
{
printf("文件打开失败\n");
return;
}
while (!feof(fp))
{
if (fscanf(fp, "%d\t%s\t%s\t%s\t%s\t%s\n",
&equ[m].num, &equ[m].name, &equ[m].clas, &equ[m].price, &equ[m].buy_date, &equ[m].maintain_date) == 6)
m++;
else
break;
}
fclose(fp);
if (m == 0)
{
printf("文件没有内容\n");
}
if ((fp = fopen(path, "at+")) == NULL)
{
printf("文件打开失败\n");
return;
}
printf(" 输入设备信息(是/否);\n");
scanf("%s",&ch);
while (strcmp(ch, "是") == 0)
{
printf("设备编号:\n");
scanf("%9d",&equ[m].num);
for (i = 0; i < m; i++)
{
if (equ[i].num == equ[m].num)
{
printf("该信息已存在\n");
fclose(fp);
getchar();
return;
}
}
printf(" 设备名称:\n");
fflush(stdin);
scanf("%s",&equ[m].name);
fflush(stdin);
printf(" 数量:\n");
fflush(stdin);
scanf("%s",&equ[m].clas);
fflush(stdin);
printf(" 价格:\n");
scanf("%s",&equ[i].price);
fflush(stdin);
printf(" 购买日期:\n");
scanf("%s",&equ[m].buy_date);
fflush(stdin);
printf(" 最近一次维修日期:\n");
scanf("%s",&equ[m].maintain_date);
fflush(stdin);
if (fprintf(fp,"%d\t%s\t%s\t%s\t%s\t%s\t\t\n",
equ[m].num, &equ[m].name, &equ[m].clas, &equ[m].price, &equ[m].buy_date, &equ[m].maintain_date) == 6)
{
printf("信息保存成功\n");
m++;
}
printf("是否继续录入设备信息(是/否):");
scanf("%s", ch);
}
fclose(fp);
}
//删除设备信息
void delet()
{
FILE* fp;
int num, m = 0;
int i, j;
int flag = 0;
char ch[2];
if ((fp = fopen(path, "rb")) == NULL)
{
printf("文件打开失败\n");
return;
}
while (!feof(fp))
{
if (fscanf(fp, "%d\t%s\t%s\t%s\t%s\t%s\n",
&equ[m].num, &equ[m].name, &equ[m].clas, &equ[m].price, &equ[m].buy_date, &equ[m].maintain_date) == 6)
m++;
else
break;
}
fclose(fp);
if (m == 0)
{
printf("文件中没有设备信息\n");
}
else
{
printf("请输入需要删除设备信息的编号:");
scanf("%d",&num);
}
for (i = 0; i < m; i++)
{
if (equ[i].num == num)
{
printf("该设备已找到,是否删除(是/否):");
scanf("%s", ch);
if (strcmp(ch, "是") == 0)
{
for (j = i; j < m; j++)
{
equ[j] = equ[j + 1];
}
m--;
flag = 1;
if ((fp = fopen(path, "wb")) == NULL)
{
printf("文件打开失败\n");
return;
}
for (j = 0; j < m; j++)
{
if (fwrite(&equ[j], LEN, 1, fp) != 1)
{
printf("不能保存\n");
getchar();
}
}
fclose(fp);
printf("删除成功!\n"); break;
}
else
{
printf("设备信息存在,不需要删除。");
break;
}
}
}
if (m == i && flag == 0)
{
printf("未找到该设备");
}
}
//修改设备信息
void updet()
{
int num;
char name[5];
char clas[10];
char price[8];
char buy_date[15];
char maintain_date[15];
FILE* fp;
int m = 0, a;
int i, j;
if ((fp = fopen(path, "rb")) == NULL)
{
printf("文件打开失败\n");
return;
}
while (!feof(fp))
{
if (fscanf(fp, "%d\t%s\t%s\t%s\t%s\t%s\n",
&equ[m].num, &equ[m].name, &equ[m].clas, &equ[m].price, &equ[m].buy_date, &equ[m].maintain_date) == 6)
m++;
else
break;
}
fclose(fp);
if (m == 0)
{
printf("文件中没有设备信息\n");
}
else
{
printf("请输入需要修改设备信息的编号:");
scanf("%d",&num);
}
for (i = 0; i < m; i++)
{
if (num == equ[i].num)
{
printf("1:编号,2:设备名称,3:数量,4:价格,5:购买日期,6:最近一次维修日期\n");
printf("该设备已被找到,请选择需要修改的内容(1-5):");
scanf("%d",&a);
while (a)
{
switch (a)
{
case 1:
printf("将%d编号的设备的编号修改为:", num);
scanf("%d",&num);
equ[i].num = num;
for (j = i + 1; j < m; j++)
{
if (equ[j].num == num)
{
printf("您修改的编号已存在\n");
getchar();
return;
}
}
break;
case 2:
printf("将%d编号的设备名称修改为:", num);
scanf("%s",&name);
strcpy(equ[i].name, name);
break;
case 3:
printf("将%d编号的数量修改为:", num);
scanf("%s",&clas);
strcpy(equ[i].clas, clas);
break;
case 4:
printf("将%d编号的设备价格修改为:", num);
scanf("%s",&price);
strcpy(equ[i].price, price);
break;
case 5:
printf("将%d编号的设备购买日期修改为:", num);
scanf("%s",&buy_date);
strcpy(equ[i].buy_date, buy_date);
break;
case 6:
printf("将%d编号的设备最近一次维修日期修改为:", num);
scanf("%s",&maintain_date);
strcpy(equ[i].maintain_date,maintain_date);
break;
default:
printf("选择错误,请重新选择需要修改的内容:");
scanf("%d",&a);
break;
}
printf("请选择需要修改的内容(如果已修改完成请按0):");
scanf("%d",&a);
}
if ((fp = fopen(path, "wb")) == NULL)
{
printf("文件打开失败\n");
return;
}
for (j = 0; j < m; j++)
{
fprintf(fp,"%d\t%s\t%s\t%s\t%s\t%s\n",
equ[j].num, &equ[j].name, &equ[j].clas, &equ[j].price, &equ[j].buy_date, &equ[j].maintain_date);
}
fclose(fp);
printf("修改成功!\n");
break;
}
}
if (m == i)
{
printf("未找到该设备\n");
}
}
//查询设备信息
void select()
{
int num, m = 0;
int i;
FILE* fp;
if ((fp = fopen(path, "rt+")) == NULL)
{
printf("文件打开失败\n");
return;
}
while (!feof(fp))
{
if (fscanf(fp, "%d\t%s\t%s\t%s\t%s\t%s\n",
&equ[m].num, &equ[m].name, &equ[m].clas, &equ[m].price, &equ[m].buy_date, &equ[m].maintain_date) == 6)
m++;
else
break;
}
fclose(fp);
if (m == 0)
{
printf("文件没有内容\n");
return;
}
printf("请输入设备编号进行查询:");
scanf("%d",&num);
for (i = 0; i < m; i++)
{
if (num == equ[i].num)
{
printf("\n");
printf("该设备信息已被查到;\n");
printf("设备编号\t设备名称\t数量\t价格\t购买日期\t最近一次维修日期\t\n");
printf("%7d\t%s\t\t%s\t%s\t%s\t%s\t\n",equ[i].num, &equ[i].name, &equ[i].clas, &equ[i].price, &equ[i].buy_date, &equ[i].maintain_date);
break;
}
}
if (m == i)
{
printf("该设备信息不存在\n");
return;
}
}
//显示设备信息
void print()
{
int i, m = 0;
FILE* fp;
if ((fp = fopen(path, "rt")) == NULL)
{
printf("文件打开失败\n");
return;
}
while (!feof(fp))
{
if (fscanf(fp, "%d\t%s\t%s\t%s\t%s\t%s\n",
&equ[m].num, &equ[m].name, &equ[m].clas, &equ[m].price, &equ[m].buy_date, &equ[m].maintain_date) == 6)
m++; //得出行数
else
break;
}
fclose(fp);
if (m == 0)
{
printf("文件中没有内容\n");
}
else
{
printf("设备编号\t设备名称\t数量\t价格\t购买日期\t最近一次维修日期\n");
for (i = 0; i < m; i++)
{
printf("%7d\t\t%s\t\t%s\t%s\t%s\t%s\t\n", equ[i].num, &equ[i].name, &equ[i].clas, &equ[i].price, &equ[i].buy_date, &equ[i].maintain_date);
}
}
}
//清屏
void clea()
{
system("cls");
}
int main()
{
menu();
int n;
printf("请选择功能(1-6):\n");
scanf("%d",&n);
while (n)
{
if (n >= 1 && n <= 9)
{
switch (n)
{
case 1:in(); break;
case 2:delet(); break;
case 3:updet(); break;
case 4:select(); break;
case 5:print(); break;
case 6:clea(); break;
}
if (n == 6)
{
menu();
}
printf("\n");
printf("请选择功能(1-6):");
scanf("%d",&n);
}
else
{
printf("\n");
printf("请重新输入:");
scanf("%d",&n);
}
}
return 0;
}
输入设备信息后会出现乱码问题,
fprintf() fscanf() printf() 函数的使用有问题,修改如下,供参考:
if (fscanf(fp, "%d\t%s\t%s\t%s\t%s\t%s\n",
&equ[m].num, equ[m].name, equ[m].clas, equ[m].price, equ[m].buy_date, equ[m].maintain_date) == 6) //修改
//&equ[m].num, &equ[m].name, &equ[m].clas, &equ[m].price, &equ[m].buy_date, &equ[m].maintain_date) == 6)
if (fprintf(fp,"%d\t%s\t%s\t%s\t%s\t%s\t\t\n",
equ[m].num, equ[m].name, equ[m].clas, equ[m].price, equ[m].buy_date, equ[m].maintain_date) == 6) //修改
//equ[m].num, &equ[m].name, &equ[m].clas, &equ[m].price, &equ[m].buy_date, &equ[m].maintain_date) == 6)
printf("%7d\t\t%s\t\t%s\t%s\t%s\t%s\t\n", equ[i].num, equ[i].name, equ[i].clas, equ[i].price, equ[i].buy_date, equ[i].maintain_date); //修改
// printf("%7d\t\t%s\t\t%s\t%s\t%s\t%s\t\n", equ[i].num, &equ[i].name, &equ[i].clas, &equ[i].price, &equ[i].buy_date, &equ[i].maintain_date);
所有的 char 替换成 wchar 看看(仅限 VC++)