图书管理系统 C 语言代码 , 很久以前写成,刚刚从硬盘里发现他,传上来了
下载地址: http://download.csdn.net/source/1886795
/* 图书管理系统: 要求: 1.图书信息基本输入(编号 名称 出版社 作者 价格) 2.图书基本信息修改 3.图书删除 4.图书基本信息查询(编号 名称 出版社 作者) 5.图书排序(按编号 名称) */ #include <stdio.h> #include <string.h> #include <stdio.h> typedef struct //图书结构体 { char num[20]; // 编号 char name[20]; // 名称 char press[20]; // 出版社 char author[20]; // 作者 float price; // 价格 }book; book bk[1000]; int cout=0; //图书的数量 int login(char *ad,char *pa) // 登入到系统 { char administrator[20],password[20]; FILE *fl; fl=fopen("administrator.txt","r"); fscanf(fl,"%s",administrator); fscanf(fl,"%s",password); if( strcmp(ad,administrator)==0 && strcmp(pa,password)==0 ) return 1; else return 0; } void login_menu() //登陆界面 { printf("\n\n\n\n\t\t ☆☆☆☆☆ 欢迎来到图书管理系统 ☆☆☆☆☆\n"); printf("\t\t ☆☆☆☆☆ 请输入用户名和密码: ☆☆☆☆☆\n\n"); } void login_wrong() //登入失败提示 { printf("\t\t 用户名或密码错误,请重新输入:\n"); system("pause"); system("cls"); } void read_file() //读文件 { FILE *fo; fo=fopen("data.dat","r"); fscanf(fo,"%d",&cout); int i; for(i=1;i<=cout;i++) { fscanf(fo,"%s",bk[i].num); fscanf(fo,"%s",bk[i].name); fscanf(fo,"%s",bk[i].press); fscanf(fo,"%s",bk[i].author); fscanf(fo,"%f",&bk[i].price); } } void write_file() //写文件 { FILE *fp; fp=fopen("data.dat","w"); int i; fprintf(fp,"%d\n",cout); for(i=1;i<=cout;i++) { fprintf(fp,"%5s",bk[i].num); fprintf(fp,"%10s",bk[i].name); fprintf(fp,"%13s",bk[i].press); fprintf(fp,"%13s",bk[i].author); fprintf(fp,"%13f\n",bk[i].price); } } void input() //图书信息基本输入 { system("cls"); printf("\n\n\n\n\t\t ☆☆☆☆☆ 增加图书 ☆☆☆☆☆\n\n"); cout++; //图书的数量+1 printf("请输入图书的编号: "); scanf("%s",bk[cout].num); printf("请输入图书的名称: "); scanf("%s",bk[cout].name); printf("请输入图书的出版社: "); scanf("%s",bk[cout].press); printf("请输入图书的作者: "); scanf("%s",bk[cout].author); printf("请输入图书的价格: "); scanf("%f",&bk[cout].price); } void sort_menu() // 排序图书菜单 { system("cls"); printf("请选择排序图书的方式:\n"); printf("1——编号\n"); printf("2——书名\n"); printf("0——退出排序\n"); printf("请选择:"); } void del_menu() //删除图书菜单 { system("cls"); printf("\n\n\n\n\t ☆☆☆☆☆ 删除图书 ☆☆☆☆☆\n\n"); printf(" 请选择是要通过书的编号还是书的名称来删除图书:\n"); printf(" 1——编号\n"); printf(" 2——名称\n"); printf(" 0——退出删除\n"); printf("请选择:"); } void search_menu() // 查找图书菜单 { system("cls"); printf("\n\n\n\n\t ☆☆☆☆☆ 查找图书 ☆☆☆☆☆\n\n"); printf(" 请选择通过什么方法来查找图书:\n"); printf(" 1——编号\n"); printf(" 2——名称\n"); printf(" 3——出版社\n"); printf(" 4——作者\n"); printf(" 0——退出查询\n"); printf("请选择:"); } void change_menu() //修改图书菜单 { system("cls"); printf("\n\n\n\n\t ☆☆☆☆☆ 修改图书 ☆☆☆☆☆\n\n"); printf(" 请选择是要通过书的编号还是书的名称来修改图书:\n"); printf(" 1——编号\n"); printf(" 2——名称\n"); printf(" 0——退出修改\n"); printf(" 请选择:"); } void print_menu() // 输出菜单 { system("cls"); printf("\n ☆☆☆☆☆ 现在总共有 %d 本图书 ☆☆☆☆☆\n\n",cout); printf("\t请选择要执行的操作:\n"); printf("\t1——增加图书:\n"); printf("\t2——修改图书:\n"); printf("\t3——删除图书:\n"); printf("\t4——查找图书:\n"); printf("\t5——排序图书:\n"); printf("\t6——显示全部图书:\n"); printf("\t0——退出:\n"); printf("\t请选择: "); } void print_head() // 输出头 { char id[5]="序号"; char num[5]="编号"; char name[5]="名称"; char press[9]="出版社"; char author[9]="作者"; char price[11]="价格"; printf("% 5s",id); printf("%10s",num); printf("%13s",name); printf("%13s",press); printf("%13s",author); printf("%13s",price); printf("\n"); } void output(int i) //输出 cout 为 i 的图书信息 { printf("%10s",bk[i].num); printf("%13s",bk[i].name); printf("%13s",bk[i].press); printf("%13s",bk[i].author); printf("%15f",bk[i].price); } void del(int number) //删除 cout 为 number 的书 { int i; for(i=number;i<cout;i++) { strcpy(bk[i].num,bk[i+1].num); strcpy(bk[i].name,bk[i+1].name); strcpy(bk[i].press,bk[i+1].press); strcpy(bk[i].author,bk[i+1].author); bk[i].price=bk[i+1].price; } cout--; //书的总数 -1 } void change(int b_cout) //修改 cout 为 b_cout 的书的信息 { printf("所要修改的图书为:\n"); output(b_cout); while(1) { printf("请选择所要修改图书的哪一项:\n"); printf("1——编号\n"); printf("2——名称\n"); printf("3——出版社\n"); printf("4——作者\n"); printf("5——价格\n"); printf("0——退出\n"); int point; scanf("%d",&point); if(point==0) break; switch(point) { case 1: printf("请输入新的编号:\n"); scanf("%s",bk[b_cout].num); break; case 2: printf("请输入新的名称:\n"); scanf("%s",bk[b_cout].name); break; case 3: printf("请输入新的出版社:\n"); scanf("%s",bk[b_cout].press); break; case 4: printf("请输入新的作者:\n"); scanf("%s",bk[b_cout].author); break; case 5: printf("请输入新的价格:\n"); scanf("%f",&bk[b_cout].price); break; default: printf("输入有误,请重新选择:\n\n"); } } } int search_num(char b_num[]) //通过编号查找书,返回书的cout { int i; for(i=1;i<=cout;i++) if(strcmp(b_num,bk[i].num)==0) break; if(i==cout+1) return 0; else return i; } int search_name(char b_name[]) //通过名称查找书,返回书的cout { int i; for(i=1;i<=cout;i++) if(strcmp(b_name,bk[i].name)==0) break; if(i==cout+1) return 0; else return i; } void output_all()//显示全部图书 { system("cls"); printf("\n\n\n\n\t\t ☆☆☆☆☆ 现在总共有 %d 本图书 ☆☆☆☆☆\n\n",cout); int i; print_head(); for(i=1;i<=cout;i++) { printf("%5d",i); output(i); printf("\n"); } } void pause() // 暂停函数 { printf("\n请按任意键键继续\n"); getch(); } void swap(char *src, char *des) //字符串交换函数 { char t[100]; strcpy(t,src); strcpy(src,des); strcpy(des,t); } void sort_num() //按编号排序 { int i,j; float t; for(i=1;i<=cout;i++) { for(j=1;j<=i;j++) { if(strcmp(bk[i].num,bk[j].num)<0) { swap(bk[i].num,bk[j].num); swap(bk[i].name,bk[j].name); swap(bk[i].press,bk[j].press); swap(bk[i].author,bk[j].author); t=bk[i].price; bk[i].price=bk[j].price; bk[j].price=t; } } } } void sort_name() //按书名排序 { int i,j; float t; for(i=1;i<=cout;i++) { for(j=1;j<=i;j++) { if(strcmp(bk[i].name,bk[j].name)<0) { swap(bk[i].num,bk[j].num); swap(bk[i].name,bk[j].name); swap(bk[i].press,bk[j].press); swap(bk[i].author,bk[j].author); t=bk[i].price; bk[i].price=bk[j].price; bk[j].price=t; } } } } int main() { int i,j; while(1) { login_menu(); char ad[20]; char pa[20]; printf("\t\t 请输入用户名:"); scanf("%s",ad); printf("\t\t 请输入密码: "); scanf("%s",pa); if( !login(ad,pa) ) login_wrong(); else break; } while(1) { read_file(); print_menu(); int n; scanf("%d",&n); printf("\n"); if(n==0) break; switch(n) { case 1: //增加图书 input(); break; case 2://修改图书 change_menu(); int p; scanf("%d",&p); if(p==0) break; switch(p) { case 1: printf(" 请输入要修改书的编号:"); char num[20]; scanf("%s",num); j=search_num(num); if(j==0) printf(" 没有这本书!\n\t"); else change(j); break; case 2: printf(" 请输入要修改书的名称:"); char name[20]; scanf("%s",name); i=search_name(name); if(i==0) printf(" 没有这本书!\n\t"); else change(i); break; default: printf(" 输入错误!\n\t"); } break; case 3://删除图书 del_menu(); int p1; scanf("%d",&p1); if(p1==0) break; switch(p1) { case 1: printf("请输入要删除书的编号:"); char num[20]; scanf("%s",num); j=search_num(num); if(j==0) printf("没有这本书!\n"); else del(j); break; case 2: printf("请输入要删除书的名称:"); char name[20]; scanf("%s",name); i=search_name(name); if(i==0) printf("没有这本书!"); else del(i); break; default: printf("输入错误!\n"); } break; case 4://查找图书 search_menu(); int p2; scanf("%d",&p2); printf("\n"); if(p2==0) break; switch(p2) { case 1: printf(" 请输入要查找书的编号:"); char num[20]; scanf("%s",num); printf("\n"); j=search_num(num); if(j==0) printf(" 没有这本书!\n"); else { printf(" 要查找的书有:\n"); output(j); } break; case 2: printf(" 请输入要查找书的名称:"); char name[20]; scanf("%s",name); printf("\n"); i=search_name(name); if(i==0) printf(" 没有这本书!\n"); else { printf(" 要查找的书有:\n"); output(i); } break; case 3: printf(" 请输入要查找书的出版社:"); char press[20]; scanf("%s",press); printf("\n"); printf(" 要查找的书有:\n"); for(i=1;i<=cout;i++) { if(strcmp(press,bk[i].press)==0) { printf(" 找到第 %d 本书:\n",i); output(i); printf("\n"); } } break; case 4: printf(" 请输入要查找书的作者:"); char author[20]; scanf("%s",author); printf("\n"); printf(" 要查找的书有:\n"); for(j=1;j<=cout;j++) { if(strcmp(author,bk[j].author)==0) { printf(" 找到第 %d 本书:\n",j); output(j); printf("\n"); } } break; default: printf(" 输入错误!\n"); } break; case 5://排序图书 sort_menu(); int p3; scanf("%d",&p3); printf("\n"); if(p3==0) break; switch(p3) { case 1://按编号排序 sort_num(); output_all(); break; case 2://按书名排序 sort_name(); output_all(); break; default: printf("输入错误!\n"); } break; case 6://显示全部图书 output_all(); break; default: printf("输入有误,请重新选择:\n\n"); } write_file(); pause(); } }