📄 prog.cpp
字号:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#define NUM 30000
#define SIZE 60
#define PF printf(" %-6d%-16s%-2s %-6s%-6s%-6s\n",man[j].id,man[j].name,man[j].sex,man[j].yu,man[j].shu,man[j].ying);
struct
{char inf[SIZE];
int id;
char name[16];
char sex[2];
char yu[6];
char shu[6];
char ying[6];
int n;
}man[NUM],man1[NUM];
int i;
void top()
{printf("\n * * * * * * * * * * 图* *书* *管* *理* *系* *统 * * * * * * * * * *\n");
printf(" * *\n");
printf(" * 你能在以下选项中 *\n");
printf(" * 选择想要的项目对文件进行管理! *\n");
printf(" * 1.浏览图书文件,请输入O *\n");
printf(" * 2.插入图书文件,请输入I *\n");
printf(" * 3.更新图书文件,请输入U *\n");
printf(" * 4.删除图书文件,请输入D *\n");
printf(" * 5.查找图书文件,请输入S *\n");
printf(" * 6.排列图书文件,请输入E *\n");
printf(" * 7.使用说明帮助,请输入H *\n");
printf(" * 8.保存退出程序,请输入X *\n");
printf(" * *\n");
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \n\n");
printf(" 请选择: ");}
void read()
{int j;
char manid[6];
char ch;
FILE *fp;
if((fp=fopen("data.dat","rb"))==NULL)
{printf("无法打开data.dat文件,请确认该文件的存在!");
exit(0);}
for (i=0;ch!=EOF;i++)
{if(i!=0) fseek(fp,-1L,1);
fread(&man[i].inf[0],SIZE,1,fp);
man[i].inf[SIZE-1]='\0';
ch=fgetc(fp);
man[i].n=i;
for(j=0;j<5;j++) manid[j]=man[i].inf[j];manid[5]='\0';man[i].id=atoi(manid);
for(j=0;j<15;j++) man[i].name[j]=man[i].inf[j+6];man[i].name[15]='\0';
man[i].sex[0]=man[i].inf[22];man[i].sex[1]='\0';
for(j=0;j<5;j++) man[i].yu[j]=man[i].inf[j+24];man[i].yu[5]='\0';
for(j=0;j<5;j++) man[i].shu[j]=man[i].inf[j+32];man[i].shu[5]='\0'; //printf("%s",man[i].shu);
for(j=0;j<5;j++) man[i].ying[j]=man[i].inf[j+41];man[i].ying[5]='\0';}
fclose(fp);
}
void top1()
{printf("________________________________________________________________________________");
printf("ID 图书名\n");}
void show()
{int j,n,t;
printf("输入1 显示全部数据,输入 2 显示部分数据: ");
top:scanf("%d",&n);
if(n==1){
printf("\n\n这里有 %d 条数据\n",i-1);
top1();
for(j=0;j<i;j++)
PF
printf("\n________________________________________________________________________________\n");
}
else if(n==2)
{back:printf("输入你想要显示的数据条数:");
scanf("%d",&n);
if(n>i){printf("这里只有 %d 条数据,请重新输入:",i-1);goto back;}
else {printf("你想从第几条数据开始?(1~%d)",i-n+1);
back1:scanf("%d",&t);
if(t>i-n+1){printf("起始位置必须<=%d,请重新输入: ",i-n+1);goto back1;}
else{printf("\n\n 这里有 %d 条数据\n",n);
top1();
for(j=t;j<t+n;j++)
printf(" %-6d%-16s%-2s %-6s%-6s%-6s\n",man[j].id,man[j].name,man[j].sex,man[j].yu,man[j].shu,man[j].ying);
printf("\n________________________________________________________________________________\n");}}}
else {printf("输入错误请重新输入: ");goto top;}
getchar();}
void searchname()
{int sortid[300],j,t,n=0;
char sort[16];
printf("输入名称:");
scanf("%s",sort);
for(j=0;j< i;j++)
{for(t=0;t<16;t++)
if(man[j].name[t]==' ')
man[j].name[t]='\0';
if(strcmp(sort,man[j].name)==0)
{sortid[n]=j;
n++;
if(n>299)
break;}
}
if(n==0)
printf("数据不存在\n");
else {printf("这里有 %d 条数据\n",n);
top1();
for(t=0;t<n;t++)
printf(" %-6d%-16s%-2s %-6s%-6s%-6s\n",man[sortid[t]].id,man[sortid[t]].name,man[sortid[t]].sex,man[sortid[t]].yu,man[sortid[t]].shu,man[sortid[t]].ying);
}}
void insert()
{
long int m,n;int flag=0;int flag2;
printf("请输入图书名:(<= 4个字):");
loop1:scanf("%s",man[i].name);
if (strlen(man[i].name)>15) {printf("名字太长,请重新输入:");goto loop1;}
man[i].n=i+1;
man[i].id=i;
top1();
printf(" %-6d%-16s%-2s %-6s%-6s%-6s\n",man[i].id,man[i].name,man[i].sex,man[i].yu,man[i].shu,man[i].ying);
printf("你确定要插入吗? 1(yes)/0(no): ");
scanf("%d",&flag2);
if (flag2==0) ;
else {
char addid[6],addname[16],addsex[2],addyu[6],addshu[6],addying[6];
int j,t;
_itoa(man[i].id,addid,10);
t=strlen(addid);
for(j=t-1;j>=0;j--)addid[5-t+j]=addid[j];
for(j=0;j<5-t;j++)addid[j]='0';
addid[5]='|';
for(j=0;j<strlen(man[i].name);j++)addname[j]=man[i].name[j];
for(;j<15;j++)addname[j]=' ';addname[15]='|';
addsex[0]=man[i].sex[0];addsex[1]='|';
for(j=0;j<5;j++)addyu[j]=man[i].yu[j];
addyu[6]='|';
for(j=0;j<5;j++)addshu[j]=man[i].shu[j];
addshu[6]='|';
for(j=0;j<5;j++)addying[j]=man[i].ying[j];
addying[6]='|';
for(j=0;j<6;j++)man[i].inf[j]=addid[j];
for(j=6;j<22;j++)man[i].inf[j]=addname[j-6];
for(j=22;j<24;j++)man[i].inf[j]=addsex[j-22];
for(j=24;j<32;j++)man[i].inf[j]=addyu[j-24];
for(j=32;j<41;j++)man[i].inf[j]=addshu[j-32];
for(j=41;j<60;j++)man[i].inf[j]=addying[j-41];//printf("%s",man[i].inf);
i++;
}
getchar();
}
void update()
{printf("请选择你要修改的数据的ID号:\n");
int flag2,m,n;
int sortid,t,j;
//char sort[18];
in:scanf("%d",&sortid);
if(sortid==0||sortid>i)
{printf("输入错误!错误的ID!请重新输入!");goto in;}
else {
top1();
printf(" %-6d%-16s%-2s %-6s%-6s%-6s\n",man[sortid].id,man[sortid].name,man[sortid].sex,man[sortid].yu,man[sortid].shu,man[sortid].ying);//列出信息
printf("确定?1(yes)/0(no): ");
scanf("%d",&t);
if(t==1)
{printf("选择你想要修改的数据:\n");
printf("1.ID\t2.图书名\n 请选择:");
shuru:scanf("%d",&flag2);
if(flag2<1||flag2>6)
{printf("输入错误,请重新输入!");goto shuru;}
else{
if(flag2==1)
printf("ID 是主键无法修改\n");
else if(flag2==2){printf("输入新名字:");
loop1:scanf("%s",man[sortid].name);
if (strlen(man[sortid].name)>15) {printf("名字太长,请重新输入:");goto loop1;}
for(j=6;j<21;j++)
{if(man[sortid].name[j-6]=='\0') break;
else man[sortid].inf[j]=man[sortid].name[j-6];}
for (;j<21;j++)man[sortid-1].inf[j]=' ';}
else printf("输入错误");
}
}}}
void del()
{printf("请选择你要删除的数据的ID号:\n");
int sortid,t,j,k;//char sort[18];
in:scanf("%d",&sortid);
if(sortid==0||sortid>i)
{printf("输入错误!错误的ID!请重新输入!");goto in;}
else
{top1();
printf(" %-6d%-16s%-2s %-6s%-6s%-6s\n",man[sortid].id,man[sortid].name,man[sortid].sex,man[sortid].yu,man[sortid].shu,man[sortid].ying);
printf("确定?1(yes)/0(no): ");
scanf("%d",&t);
if(t==1)
{for(j=sortid;j<i-1;j++)
{char m[SIZE];
strcpy(m,man[j].inf);
strcpy(man[j].inf,man[j+1].inf);
strcpy(man[j].name,man[j+1].name);
strcpy(man[j].yu,man[j+1].yu);
strcpy(man[j].shu,man[j+1].shu);
strcpy(man[j].ying,man[j+1].ying);
for(k=0;k<5;k++)man[j].inf[k]=m[k];}
i--;}
}
}
void search()
{int t,sortid;
printf("选择你想要的查找类型: \n");
printf("1.ID\t2.图书名\n\n 请选择:");
scanf("%d",&t);
if(t==1) {printf("请输入:");
scanf("%d",&sortid);
top1();
printf(" %-6d%-16s%-2s %-6s%-6s%-6s\n",man[sortid-1].id,man[sortid-1].name);
}
else if(t==2)searchname();
else printf("输入错误!\n");
getchar();
}
void sequence()
{
int j,t,flag,mm;
printf("按以下类型排序,请选择\n1.图书名\t\n");
in:scanf("%d",&flag);
for(j=1;j<i;j++)
{strcpy(man1[j].inf,man[j].inf);
man1[j].id=man[j].id;
strcpy(man1[j].name,man[j].name);
strcpy(man1[j].sex,man[j].sex);
strcpy(man1[j].yu,man[j].yu);
strcpy(man1[j].shu,man[j].shu);
strcpy(man1[j].ying,man[j].ying);
man1[j].n=man[j].n;}
if(flag<1||flag>5)
{printf("输入错误,请重新输入!");goto in;}
else{
if(flag==1)
{for(j=1;j<i-1;j++)
for(t=j+1;t<i;t++)
if(strcmp(man1[j].name,man1[t].name)>0) {mm=man1[j].n;man1[j].n=man1[t].n;man1[t].n=mm;}}
else if(flag==2)
{for(j=1;j<i-1;j++)
for(t=j+1;t<i;t++)
if(strcmp(man1[j].sex,man1[t].sex)>=0){mm=man1[j].n;man1[j].n=man1[t].n;man1[t].n=mm;}}
else if(flag==3)
{for(j=1;j<i-1;j++)
for(t=j+1;t<i;t++)
if(strcmp(man1[j].yu,man1[t].yu)>=0){mm=man1[j].n;man1[j].n=man1[t].n;man1[t].n=mm;}}
else if(flag==4)
{for(j=1;j<i-1;j++)
for(t=j+1;t<i;t++)
if(strcmp(man1[j].shu,man1[t].shu)>=0){mm=man1[j].n;man1[j].n=man1[t].n;man1[t].n=mm;}}
else if(flag==5)
{for(j=1;j<i-1;j++)
for(t=j+1;t<i;t++)
if(strcmp(man1[j].ying,man1[t].ying)>=0){mm=man1[j].n;man1[j].n=man1[t].n;man1[t].n=mm;}}
else {printf("输入错误\n");goto in;}
printf("未排序前的顺序是:\n");
top1();
for(j=1;j<i;j++)
printf("%-6d%-16s%-2s %-6s%-6s%-6s%d\n",man1[j].id,man1[j].name,man1[j].sex,man1[j].yu,man1[j].shu,man1[j].ying);
for(j=1;j<i;j++)
{strcpy(man[man1[j].n].inf,man1[j].inf);
strcpy(man[man1[j].n].name,man1[j].name);
strcpy(man[man1[j].n].sex,man1[j].sex);
strcpy(man[man1[j].n].yu,man1[j].yu);
strcpy(man[man1[j].n].shu,man1[j].shu);
strcpy(man[man1[j].n].ying,man1[j].ying);
}
printf("\n重新排列后新的顺序是: \n");
top1();
for(j=1;j<i;j++)
printf(" %-6d%-16s%-2s %-6s%-6s%-6s\n",man[j].id,man[j].name,man[j].sex,man[j].yu,man[j].shu,man[j].ying);
getchar();
}}
void help()
{printf("\n\n\n\n\n");
printf(" 使用方法:使用前要浏览一遍全部的数据,注意是否有数据的存在,若无, 请使用\n");
printf(" 插入数据的选项,逐个添加数据,本程序还可以对数据进行更新删除排序操作,更\n");
printf(" 新或删除前请尽量再次浏览一遍数据,以确认操作无误.对数据的录入注意位数,\n");
printf(" 在完成每步操作后用回车键回到主介面\n");
printf(" 注 意:退出程序前,必须保存修改的数据,确定保存后方可退出!\n");}
void exit()
{
int j;
for(j=0;j<i;j++)
man[j].inf[SIZE-1]='|';
FILE *fpw;
if((fpw=fopen("data.dat","wb"))==NULL)
{printf("无法打开data.dat文件,请确认该文件的存在!");exit(0);}
for(j=0;j< i;j++)
if(fwrite(&man[j].inf[0],SIZE,1,fpw)!=1)
printf("文件写入错误!\n");
fclose(fpw);
}
void main()
{char chose;
read();
loop:top();
loopp:chose=getchar();
if(chose=='O'||chose=='o'||chose=='1') {show();getchar();goto loop;}
else if(chose=='i'||chose=='I'||chose=='2') {insert();getchar();goto loop;}
else if(chose=='u'||chose=='U'||chose=='3') {update();getchar();goto loop;}
else if(chose=='d'||chose=='D'||chose=='4') {del();getchar();goto loop;}
else if(chose=='s'||chose=='S'||chose=='5') {search();getchar();goto loop;}
else if(chose=='e'||chose=='E'||chose=='6') {sequence();getchar();goto loop;}
else if(chose=='h'||chose=='H'||chose=='7') {help();getchar();goto loop;}
else if(chose=='x'||chose=='X'||chose=='8') {int m;
printf("是否保存修改? 1(yes)/0(no): ");
scanf("%d",&m);
if(m==1)
{exit();printf("\n *************** 谢谢您的使用 ***************\n\n");}
else printf("\n *************** 谢谢您的使用 ***************\n\n");
}
else {printf("输入错误,请重新选择:");goto loopp;}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -