天天看点

图书管理系统 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();

}

}

继续阅读