废话不多说,直接贴源代码
下载地址 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();
}
}