廢話不多說,直接貼源代碼
下載地址 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(); } }