观前注意:复制粘贴没关系请点个赞,局部有误但无影响总体。本文只设计C语言基础语法。因为历史遗留问题,时间冗长,笔者现已不想修改此文,抱歉。请“拿来主义者”自行修改调整代码。
图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。试设计一图
书信息管理系统,使之能提供以下功能:
系统以菜单方式工作
图书信息录入功能(图书信息用文件保存)--输入
图书信息浏览功能--输出
查询和排序功能:--算法
按书名查询
按作者名查询
图书信息的删除与修改
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
struct Lib
{
int num; //登陆号
char name[32]; //书名
char nat[32]; //作者名
char adr[32]; //出版单位
int time; //出版时间
int num2; //分类号
int price; //价格
};
struct Lib lib[100];
int count=0,i=0;
char input() //图书信息录入
{
for(;i<40;i++)
{
printf("请输入图书登陆号:");
scanf("%d",&lib[i].num);
printf("请输入图书书名:");
scanf("%s",&lib[i].name);
printf("请输入作者名:");
scanf("%s",&lib[i].nat);
printf("请输入出版单位:");
scanf("%s",&lib[i].adr);
printf("请输入出版时间:");
scanf("%d",&lib[i].time);
printf("请输入分类号:");
scanf("%d",&lib[i].num2);
printf("请输入价格:");
scanf("%d",&lib[i].price);
count++;//记录录入信息的个数
system("cls");//清屏
return -1;
}
}
void brouse() //图书信息浏览
{
int i;
printf(" 登录号 书名 作者名 出版单位 出版时间 分类号 价格 \n");
for(i=0;i<count;i++)
{
printf(" %d %s %s %s %d %d %d\n",lib[i].num,lib[i].name,lib[i].nat,lib[i].adr,lib[i].time,lib[i].num2,lib[i].price);
}
printf("请按任意键返回");
_getch();
}
void name()//书名查询
{
int i;
char name[10];
printf("请输入所查图书名字:\n");
scanf("%s",name);
for(i=0;i<count;i++)
if(strcmp(lib[i].name,name)==0)
{
printf("查询结果如下:\n");
printf(" 登录号 书名 作者名 出版单位 出版时间 分类号 价格 \n");
printf(" %d %s %s %s %d %d %d\n",lib[i].num,lib[i].name,lib[i].nat,lib[i].adr,lib[i].time,lib[i].num2,lib[i].price);
break;
}
if(i>=count)
{
printf("\n\n\t狠抱歉,没有该图书的信息\n");
}
printf("请按任意键返回");
_getch();
}
void nat() //作者名查询
{
int i;
char nat[10];
printf("请输入所查询作者的名字:\n");
scanf("%s",nat);
for(i=0;i<count;i++)
if(strcmp(lib[i].nat,nat)==0)
{
printf("查询结果如下:\n");
printf(" 登录号 书名 作者名 出版单位 出版时间 分类号 价格 \n");
printf(" %d %s %s %s %d %d %d\n",lib[i].num,lib[i].name,lib[i].nat,lib[i].adr,lib[i].time,lib[i].num2,lib[i].price);
break;
}
if(i>=count)
{
printf("\n\n\t狠抱歉,没有该图书的信息\n");
}
printf("请按任意键返回");
_getch();
}
void search() //图书信息查询
{
void num();
void name();
void tel();
int i;
printf("\n");
printf(" 1.按书名查询 \n");
printf(" 2.按作者名查询 \n");
printf(" 3.返回管理系统页面 \n");
printf("\n");
scanf("%d",&i);
system("cls");
switch(i)
{
case 1: name();break;
case 2: nat();break;
case 3:break;
}
}
void renum()//登录号修改
{
char name[10];
int i,t;
printf("请输入需要修改的图书名字:");
scanf("%s",name);
printf("\n\n");
for(i=0;i<count;i++)
if(strcmp(lib[i].name,name)==0)
{
printf("本图书初始登录号为:%d\n",lib[i].num);
printf("修改后的登录号是:");
scanf("%d",&t);
lib[i].num=t;
printf("\n");
printf("修改成功!!\n");
break;
}
if(i>=count)
{
printf("\n\n\t狠抱歉,没有该图书的信息\n");
}
printf("请按任意键返回");
_getch();
}
void re_name()//修改书名
{
char name[10];
int i;
char t[10];
printf("请输入需要修改的图书名字:");
scanf("%s",name);
printf("\n");
for(i=0;i<count;i++)
if(strcmp(lib[i].name,name)==0)
{
printf("本图书初始名字是:%d\n",lib[i].name);
printf("修改后的名字是:");
scanf("%s",t);
strcpy(lib[i].name,t);
printf("\n");
printf("修改成功!!\n");
break;
}
if(i>=count)
{
printf("\n\n很抱歉,没有该图书的信息\n\n");
}
printf("请按任意键返回");
_getch();
}
void renat()//作者名修改
{
char name[10];
int i;
char nat[3];
printf("请输入需要修改的图书名字:");
scanf("%s",name);
printf("\n\n");
for(i=0;i<count;i++)
if(strcmp(lib[i].name,name)==0)
{
printf("本职工初始性别是:%d\n",lib[i].nat);
printf("修改后的之后的性别是:");
scanf("%s",nat);
strcpy(lib[i].nat,nat);
printf("\n");
printf("修改成功!!\n");
break;
}
if(i>=count)
{
printf("\n\n很抱歉,没有该图书的信息\n\n");
}
printf("请按任意键返回");
_getch();
}
void readr()//出版单位修改
{
int i;
char adr[10];
char name[10];
printf("请输入需要修改的图书名字:");
scanf("%s",name);
printf("\n\n");
for(i=0;i<count;i++)
if(strcmp(lib[i].name,name)==0)
{
printf("本图书初始出版单位是:%d\n",lib[i].adr);
printf("修改后的出版单位是:");
scanf("%s",adr);
strcpy(lib[i].adr,adr);
printf("\n");
printf("修改成功!!\n");
break;
}
if(i>=count)
{
printf("\n\n很抱歉,没有该图书的信息\n\n");
}
printf("请按任意键返回");
_getch();
}
void retime()//
{
int time;
char name[10];
int i;
printf("请输入需要修改的图书名字:");
scanf("%s",name);
printf("\n\n");
for(i=0;i<count;i++)
if(strcmp(lib[i].name,name)==0)
{
printf("图书的初始出版时间是:%s\n",lib[i].time);
printf("修改后的出版时间是:");
scanf("%d",&time);
lib[i].time=time;
printf("\n");
printf("修改成功!!\n");
break;
}
if(i>=count)
{
printf("\n\n很抱歉,没有该图书的信息\n\n");
}
printf("请按任意键返回");
_getch();
}
void renum2()//分类号修改
{
int num2;
char name[10];
int i;
printf("请输入需要修改的图书名字:");
scanf("%s",name);
printf("\n\n");
for(i=0;i<count;i++)
if(strcmp(lib[i].name,name)==0)
{
printf("本图书初始的分类号是:%d\n",lib[i].num2);
printf("修改后的分类号是:");
scanf("%d",&num2);
lib[i].num2=num2;
printf("\n");
printf("修改成功!!\n");
break;
}
if(i>=count)
{
printf("\n\n很抱歉,没有该图书的信息\n\n");
}
printf("请按任意键返回");
_getch();
}
void reprice()//
{
int price;
char name[10];
int i;
printf("请输入需要修改的图书名字:");
scanf("%s",name);
printf("\n\n");
for(i=0;i<count;i++)
if(strcmp(lib[i].name,name)==0)
{
printf("图书的初始价格是:%s\n",lib[i].price);
printf("修改后的价格是:");
scanf("%d",&price);
lib[i].price=price;
printf("\n");
printf("修改成功!!\n");
break;
}
if(i>=count)
{
printf("\n\n很抱歉,没有该图书的信息\n\n");
}
printf("请按任意键返回");
_getch();
}
void revise()//图书信息修改。
{
void renum();
void re_name();
void resex();
void reage();
void rexueli();
void repay();
void rezhuzhi();
void retel();
int j;
printf(" 1.登录号修改 \n");
printf(" 2.图书名修改 \n");
printf(" 3.作者名修改 \n");
printf(" 4.出版单位修改 \n");
printf(" 5.出版时间修改 \n");
printf(" 6.分类号修改 \n");
printf(" 7.价格修改 \n");
printf(" 8.返回管理系统页面 \n");
scanf("%d",&j);
system("cls");
switch(j)
{
case 1: renum();break;
case 2: re_name();break;
case 3: renat();break;
case 4: readr();break;
case 5: retime();break;
case 6: renum2();break;
case 7: reprice();break;
case 8:break;
}
}
void dele()//图书信息的删除
{
int i,j;
char del_name[10];
printf("请输入需要删除的图书名字:\n");
scanf("%s",del_name);
printf("\n");
for(i=0;i<count;i++)
{
if((strcmp(lib[i].name,del_name)==0))
{
for(j=i;j<count;j++)
{
lib[j]=lib[j+1];
}
printf("\t删除成功!!!\n\n");
count--;
}
}
printf("\n请按任意键返回\n");
_getch();
}
void sort()//图书信息的排序
{
int j;
void sortnum();
void sortnum2();
void sortprice();
printf("选择排序方法:\n");
printf(" 1.按登录号排序 \n");
printf(" 2.按分类号排序 \n");
printf(" 3.按图书价格排序 \n");
printf(" 4.返回管理系统页面 \n");
scanf("%d",&j);
system("cls");
switch(j)
{
case 1:sortnum();break;
case 2:sortnum2();break;
case 3:sortprice();break;
case 4:break;
}
}
void sortnum()//以登录号为标准,利用冒泡法进行排序
{
int i,j;
struct Lib t;
for(j=0;j<count-1;j++) //进行count-1次循环,实现count-1趟比较
{
for(i=0;i<count-1-j;i++) //在每趟中进行count-1-j次比较
{
if(lib[i].num<lib[i+1].num) //相邻两数比较
{
t=lib[i];
lib[i]=lib[i+1];
lib[i+1]=t;
}
}
}
printf("\n\n\t\t排序成功!!!\n\n");
printf("请按任意键返回");
_getch();
}
void sortnum2()//以分类号为标准,利用冒泡法进行排序
{
int i,j;
struct Lib t;
for(j=0;j<count-1;j++) //进行count-1次循环,实现count-1趟比较
{
for(i=0;i<count-1-j;i++) //在每趟中进行count-1-j次比较
{
if(lib[i].num2>lib[i+1].num2) //相邻两数比较
{
t=lib[i];
lib[i]=lib[i+1];
lib[i+1]=t;
}
}
}
printf("\n\n\t\t排序成功!!!\n\n");
printf("请按任意键返回");
_getch();
}
void sortprice()//以价格为标准,利用冒泡法进行排序
{
int i,j;
struct Lib t;//设置t结构体作为中间变量实现两个图书信息的交换
for(j=0;j<count-1;j++)
{
for(i=0;i<count-1-j;i++)
{
if(lib[i].price>lib[i+1].price)
{
t=lib[i];
lib[i]=lib[i+1];
lib[i+1]=t;
}
}
}
printf("\n\n\n");
printf("\t排序成功!!! \n\n\n");
printf("请按任意键返回");
_getch();
}
void save()//文件建立及保存
{
FILE * fp;
int i;
if((fp=fopen("lib","wb"))==NULL)
{
printf("不能打开文件\n");
return;
}
for(i=0;i<count;i++)
{
if(fwrite(&lib[i],sizeof(struct Lib),1,fp)!=1)
printf("文件输出错误\n");
}
fclose(fp);
printf("\n\n\t\t保存成功!!!\n\n");
printf("请按任意键返回");
_getch();
}
void read()//数据的读取
{
FILE * fp;
fp=fopen("lib","rb");
do
{
fread(&lib[i],sizeof(struct Lib),1,fp);//地址 长度 条数 指针
count++;
i++;
}
while(!feof(fp));//判断不等于0
i--;
count--;
fclose(fp);
printf("\n\n\t\t读取成功!!! \n\n");
printf("请按任意键返回");
_getch();
}
void quit()
{
int q;
printf("\n\n\t\t1,确定退出\n\n");
printf("\t\t2,取消退出\n \n");
scanf("%d",&q);
switch(q)
{
case 1:return;break;
case 2:break;
}
}
void main()
{
int k;
while(1)
{
system("cls");
printf("(1) 图书信息录入\n");
printf("(2) 图书信息浏览\n");
printf("(3) 图书信息查询\n");
printf("(4) 图书信息修改\n");
printf("(5) 图书信息删除\n");
printf("(6) 图书信息排序\n");
printf("(7) 图书数据保存\n");
printf("(8) 图书信息读取\n");
printf("(9) 退出 \n");
printf("\n\n");
scanf("%d",&k);
switch(k)
{
case 1:system("cls");input();break;
case 2:system("cls");brouse();break;
case 3:system("cls");search();break;
case 4:system("cls");revise();break;
case 5:system("cls");dele();break;
case 6:system("cls");sort();break;
case 7:system("cls");save();break;
case 8:system("cls");read();break;
case 9:system("cls");quit();break;
}
}
}