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