#include "iostream.h" #include "string.h" #include "stdlib.h" #include "iomanip.h" #include "stdio.h" #include "process.h" typedef struct library { int num; char name[20]; char author[10]; char kind[10]; char pubunit[30]; char pubtime[20]; int price; struct library *next; }LRY; LRY *createlib() { LRY *p,*headlib,*tail; int num,price; char name[20],kind[10],author[10]; char pubunit[30],pubtime[20]; int size=sizeof(LRY); headlib=tail=NULL; cout<<"输入图书信息:"< cin>>num>>name>>author>>kind>>pubunit>>pubtime>>price; while(num) { p=(LRY *)malloc(size); p->num=num; strcpy(p->name,name); strcpy(p->author,author); strcpy(p->kind,kind); strcpy(p->pubunit,pubunit); strcpy(p->pubtime,pubtime); p->price=price; if(headlib==NULL) headlib=p; else tail->next=p; tail=p; cin>>num>>name>>author>>kind>>pubunit>>pubtime>>price; } tail->next=NULL; return headlib; } void savefilelib(LRY *headlib) { LRY *p; FILE *fp; if((fp=fopen("e:\\library.txt","w"))==NULL){ cout<<"open fail!"< exit(0); } fprintf(fp,"登陆号 图书名 图书作者 图书分类号 出版单位 出版日期 价格\n"); for(p=headlib;p;p=p->next) fprintf(fp,"%4d%15s%10s%11s%18s%12s%6d\n",p->num,p->name,p->author,p->kind,p->pubunit,p->pubtime,p->price); if(fclose(fp)){ cout<<"close fail!"< exit(0); } cout<<"创建后的信息已放入E盘根目录的“library.txt”文件中"< } void savefilelibnew(LRY *headlib) { LRY *p; FILE *fp; if((fp=fopen("e:\\librarynew.txt","w"))==NULL){ cout<<"open fail!"< exit(0); } fprintf(fp,"登陆号 图书名 图书作者 图书分类号 出版单位 出版日期 价格\n"); for(p=headlib;p;p=p->next) fprintf(fp,"%4d%15s%10s%11s%18s%12s%6d\n",p->num,p->name,p->author,p->kind,p->pubunit,p->pubtime,p->price); if(fclose(fp)){ cout<<"close fail!"< exit(0); } cout<<"修改后的信息已放入E盘根目录的“librarynew.txt”文件中"< } void prinlib(LRY *headlib) { LRY *p=headlib; if(p==NULL){ cout<<"无信息"< return; } cout<<"登陆号 图书名 图书作者 图书分类号 出版单位 出版日期 价格"< for(p=headlib;p;p=p->next){ cout<<<P->num<<<P->name<<<P->author; cout<<<P->kind<<<P->pubunit<<<P->pubtime; cout<<<P->price< } } void searchlib(LRY *headlib) { char c='a'; int a,t=1; char name[20],author[10]; LRY *p=headlib; while(c!=' ') { cout<<"按书名查找请输入1,按作者查找输入2:"< cin>>a; switch(a) { case 1: cout<<"输入要查找的书名:"< cin>>name; cout<<"登陆号 图书名 图书作者 图书分类号 出版单位 出版日期 价格"< for(p=headlib;p;p=p->next) if(strcmp(name,p->name)==0){ cout<<<P->num<<<P->name<<<P->author; cout<<<P->kind<<<P->pubunit<<<P->pubtime; cout<<<P->price< t=0; } if(t) cout<<"未找到!"< t=1; break; case 2:cout<<"输入要查找图书的作者名:"< cin>>author; cout<<"登陆号 图书名 图书作者 图书分类号 出版单位 出版日期 价格"< for(p=headlib;p;p=p->next) if(strcmp(author,p->author)==0){ cout<<<P->num<<<P->name<<<P->author; cout<<<P->kind<<<P->pubunit<<<P->pubtime; cout<<<P->price< t=0; } if(t) cout<<"未找到!"< t=1; } cout<<"继续查找请按回车,结束请按空格"< cin.get(); //接收case中最后输入的回车键 c=cin.get(); } } LRY *insertlib(LRY *headlib) { LRY *ptr,*ptr2,*lib; int size=sizeof(LRY); char ch='a'; while(ch!=' '){ lib=(LRY *)malloc(size); ptr=lib; cout<<"输入要插入的课程信息:"< cin>>lib->num>>lib->name>>lib->author>>lib->kind>>lib->pubunit>>lib->pubtime>>lib->price; if(headlib==NULL){ headlib=ptr; headlib->next=NULL; } else{ for(ptr2=headlib;ptr2;ptr2=ptr2->next) if(ptr2->next==NULL){ ptr2->next=lib; lib->next=NULL; break; } } cout<<"继续插入请按回车,结束请按空格:"< cin.get(); //接收上面最后输入的回车 ch=cin.get(); } return headlib; } LRY *dellib(LRY *headlib) { LRY *p1,*p2; char ch='a'; int num; while(ch!=' '){ cout<<"输入想要删除的图书登陆号:"< cin>>num;; if(headlib->num==num){ p2=headlib; headlib=headlib->next; free(p2); } if(headlib==NULL) return NULL; p1=headlib; p2=headlib->next; while(p2){ if(p2->num==num){ p1->next=p2->next; free(p2); } else p1=p2; p2=p1->next; } printf("继续删除请按回车,结束请按空格:\n"); cin.get(); // 接收回车 ch=cin.get(); } return headlib; } LRY *correctlib(LRY *headlib) { LRY *p; int num,t=1; char c='a'; while(c!=' ') { cout<<"输入想要修改的图书登陆号:"< cin>>num; for(p=headlib;p;p=p->next) if(p->num==num){ cout<<"您要修改的图书的信息为:"< cout<<"登陆号 图书名 图书作者 图书分类号 出版单位 出版日期 价格"< cout<<<P->num<<<P->name<<<P->author; cout<<<P->kind<<<P->pubunit<<<P->pubtime; cout<<<P->price< cout<<"请输入新信息:"< cin>>p->num>>p->name>>p->author>>p->kind>>p->pubunit>>p->pubtime>>p->price; t=0; break; } if(t) cout<<"不存在该图书!"< cout<<"继续修改请按回车,结束请按空格"< cin.get(); c=cin.get(); } return headlib; } void readfilelib() //将文件重新读出 { char c; int num,price; char name[20]; char author[10]; char kind[10]; char pubunit[30]; char pubtime[20]; FILE *fp=fopen("e:\\library.txt","r"); while(!feof(fp)) { if((c=fgetc(fp))=='\n') break; } cout<<"登陆号 图书名 图书作者 图书分类号 出版单位 出版日期 价格"< while(!feof(fp)) { fscanf(fp,"%d%s%s%s%s%s%d\n",&num,name,author,kind,pubunit,pubtime,&price); cout<<<NUM<<SETW(15)<<NAME<<SETW(10)<<AUTHOR; cout<<<KIND<<SETW(18)<<PUBUNIT<<SETW(12)<<PUBTIME; cout<<<PRICE<<ENDL; } fclose(fp); } void readfilelibnew() //将文件重新读出 { char c; int num,price; char name[20]; char author[10]; char kind[10]; char pubunit[30]; char pubtime[20]; FILE *fp=fopen("e:\\librarynew.txt","r"); while(!feof(fp)) { if((c=fgetc(fp))=='\n') break; } cout<<"登陆号 图书名 图书作者 图书分类号 出版单位 出版日期 价格"< while(!feof(fp)) { fscanf(fp,"%d%s%s%s%s%s%d\n",&num,name,author,kind,pubunit,pubtime,&price); cout<<<NUM<<SETW(15)<<NAME<<SETW(10)<<AUTHOR; cout<<<KIND<<SETW(18)<<PUBUNIT<<SETW(12)<<PUBTIME; cout<<<PRICE<<ENDL; } fclose(fp); } void main() { int i; char clib,clibnew; LRY *headlib; cout< for(i=0;i<34;i++) cout<<"*"; cout<<"图书信息输入"; for(i=0;i<34;i++) cout<<"*"; cout< headlib=createlib(); savefilelib(headlib); cout< for(i=0;i<34;i++) cout<<"*"; cout<<"图书信息输出"; for(i=0;i<34;i++) cout<<"*"; cout< prinlib(headlib); cout< for(i=0;i<34;i++) cout<<"*"; cout<<"图书信息查找"; for(i=0;i<34;i++) cout<<"*"; cout< searchlib(headlib); cout< for(i=0;i<34;i++) cout<<"*"; cout<<"图书信息插入"; for(i=0;i<34;i++) cout<<"*"; cout< headlib=insertlib(headlib); cout<<"修改后的信息为:"< prinlib(headlib); cout< for(i=0;i<34;i++) cout<<"*"; cout<<"图书信息删除"; for(i=0;i<34;i++) cout<<"*"; cout< headlib=dellib(headlib); cout<<"修改后的信息为:"< prinlib(headlib); cout< for(i=0;i<34;i++) cout<<"*"; cout<<"图书信息修改"; for(i=0;i<34;i++) cout<<"*"; cout< headlib=correctlib(headlib); cout<<"修改后的信息为:"< prinlib(headlib); savefilelibnew(headlib); cout<<"是否再次显示文件“library.txt”的内容(Y/N)?"< cin.get(); //接收回车 clib=cin.get(); if(clib=='y'||clib=='Y'){ cout< cout<<"“library.txt”文件的信息为:"< readfilelib(); } cout<<"是否再次显示文件“librarynew.txt”的内容(Y/N)?"< cin.get(); //接收回车 clibnew=cin.get(); if(clibnew=='y'||clibnew=='Y'){ cout< cout<<"“librarynew.txt”文件的信息为:"< readfilelibnew(); } else cout<<"程序结束!"<< P> }