天天看點

圖書管理系統 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();

}

}

繼續閱讀