⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 prog.cpp

📁 图书管理 浏览图书文件 插入图书文件 更新图书文件 删除图书文件 查找图书文件 排序图书文件 使用帮助文件 等
💻 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 + -