题目2.图书信息管理系统
图书信息包括:图书编号、书名、作者名、出版社、出版时间、价格等。试设计一图书信息管理系统,实现以下菜单显示的功能:
1录入,录入每本图书的信息,按书号从小到大的顺序将图书信息存入文件中。
2添加,可以添加图书信息。若已有,可以修改该图书的信息,若没有。则插入该图书信息,插入后仍然保持按书号有序,再保存到原文件中。3查询,按书名查询图书的信息(列出所有书名相同的图书信息)
4修改,书号不可修改,按书号确定要修改的图书对象。
5删除,按书号删除图书信息。
6排序,按出版社排序,并显示。
7浏览,从文件中读取每本图书的信息并显示。0退出
给你一个CD租赁系统参考,改一下结构体名称,及中文说明就可以了。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void add(void); //新片上架函数
int check(void); // 碟片查询函数
int rent(void); //碟片借阅函数
void useradd(void); //会员添加函数
void returnn (void);// 碟片归还函数
int user_number =1000; //定义会员数目
int cd_number =1000; //定义碟片数目
struct cd//碟片结构体
{
char film_name[10]; //碟片名称
char country[10]; //碟片国家
char type[10]; //碟片类型
int n; //借阅标记1有0无
};
struct rent//碟片借阅结构体
{
char username[10]; //使用者名
char film_name[10][10]; //碟片名称
int rent_time; //借出时间
int return_time; //归还时间
int money; //租金
};
struct cd CD[1000]; //定义cd数目
struct rent RENT[1000]; //定义出租数目
//-----------------------主函数-------------------------------------
void main (void) //主函数
{
char choice; //菜单
system("color 3E");//桌面背景
printf(" ***欢迎进入影片出租管理系统*** \n");
printf("--------------------------------------------------\n");
printf(" ★请输入你的选择★\n");
printf(" ★A: 新片上架\n");
printf(" ★B: 碟片查询\n");
printf(" ★C: 碟片借阅(非会员不能借阅) \n");
printf(" ★D: 碟片归还\n");
printf(" ★E: 加入会员\n");
printf(" ★F: 退出程序\n");
printf("-------------------------------------------------\n");
scanf("%c",&choice);
switch(choice) //多条件选择判断
{
case 'A':
add(); //碟片添加函数
break;
case 'B':
check(); //碟片查询函数
break;
case 'C':
rent(); //碟片借阅函数
break;
case 'D':
returnn();//碟片归还函数
break;
case'E':
useradd();//添加会员函数
break;
case'F':
exit(0); //退出程序
}
}
//----------------碟片添加函数-----------------------
void add(void)//新片上架
{
FILE *a; //文件指针
char s;//定义字符
w: printf("请输入碟片名称:\n");
scanf("%s",CD[cd_number].film_name);
printf("请输入碟片国家:\n");
scanf("%s",CD[cd_number].country);
printf("请输入碟片类型:\n");
scanf("%s",CD[cd_number].type);
getchar();//取回车符
CD[cd_number].n = 1; //修改借阅标记
a = fopen("cd.txt","a");//追加方式打开
fwrite(&CD[cd_number], sizeof(struct cd), 1, a);
cd_number++;
printf("是否继续添加?(Y/N)\n");
scanf("%c",&s);
getchar();
switch(s) //多条件选择
{
case 'Y': goto w; //若借,返回w
case 'N': goto v; //若不借,则退出
}
v: fclose(a);//关闭a文件
system("cls");//清屏
}
//--------------------碟片查询函数------------------------------
int check(void)//碟片查询
{
FILE *a;//文件指针
char cd_name[10];
int i;
system("cls");//清屏
a=fopen("cd.txt","r"); //只读方式打开文件
for(i = 0; i < cd_number; i++)
{
fread(&CD[i], sizeof(struct cd),1, a);//把a中一个cd结构体赋给CD[i] }
printf("请输入碟片名:\n");
scanf("%s",cd_name);
getchar();//取回车符
for(i = 0; i < cd_number; i++)
{
if((strcmp(CD[i].film_name, cd_name))==0) //若影片名相同
{
if(CD[i].n==1) //借阅标记为1
{
printf("可借阅\n");
fclose(a);
return 1;
}
if(CD[i].n==0)//借阅标记为0
{
printf("已借出\n");
fclose(a);
return 1;
}
}
}
for(i = 0; i < cd_number; i++)
{
if((strcmp(CD[i].film_name, cd_name))!=0) //若影片名不同
{
printf("无此片\n");
fclose(a);
return 1;
}
}
}
fclose(a);//关闭a文件
return 0; //返回菜单
}
//------------会员添加函数---------------------------------
void useradd(void)//添加会员
{
FILE *a; //文件指针
system("cls");//清屏
printf("请输入姓名:\n");
scanf("%s",RENT[user_number].username);
getchar();
a = fopen("rent.txt","ab");//追加方式打开
fwrite(&RENT[user_number], sizeof(struct rent), 1, a);//把a中一个rent结构体赋给RENT[user_number]
printf(" 添加成功\n");
user_number++;
fclose(a);
}
//-------------碟片借阅函数-----------------------------
int rent(void) //碟片借阅
{
char user_name[10];
char cd_name[10];
int i,j;
FILE *a;//文件指针
FILE *b;//文件指针
int k=0;
char choice;
system("cls");//清屏
a = fopen("rent.txt","r");//只读方式打开
b = fopen("cd.txt","r");//只读方式打开
for (i = 0; i < cd_number; i++)
{
fread(&CD[i], sizeof(struct cd),1,b);//把b中一个cd结构体赋给CD[i] }
for (i = 0; i < user_number; i++)
{
fread(&RENT[i],sizeof(struct rent),1,a);//把a中一个rent结构体赋给RENT[i] }
printf("请输入借阅人:\n");
scanf("%s",user_name);
getchar();
a: printf("请输入碟片名:\n");
scanf("%s",cd_name);
getchar();
printf("请再次输入碟片名:\n");
scanf("%s", RENT[i].film_name[k]);
k++;
getchar();
printf("此人已借%d张\n",k);
for(j = 0; j < cd_number; j++)
{
if((strcmp(CD[j].film_name, cd_name))==0)//如果两个名相同
{
CD[j].n=0; //修改借阅标记
}
}
printf("请输入借出日期:\n");
scanf("%d",&RENT[i].rent_time);
getchar();
printf("A: 再接一张\n");
printf("B: 退出\n");
scanf("%c",&choice);
getchar();
switch(choice)//多条件选择判断
{
case 'A': goto a;
break;
case 'B': return 0;
}
}
}
fclose(a);
fclose(b);
return 0;
}
//--------------碟片归还函数----------------------------
void returnn (void) //碟片归还
{
char user_name[10];
char cd_name[10];
FILE *a;
FILE *b;
int i;
int j;
int k = 0;
char choice;
system("cls");//清屏
a = fopen("rent.txt","r");//只读方式打开
b = fopen("cd.txt","r");//只读方式打开
for (i = 0; i < cd_number; i++)
{
fread(&CD[i], sizeof(struct cd), 1, b);//把b中一个cd结构体赋给CD[i] }
for (i = 0; i < user_number; i++)
{
fread(&RENT[i], sizeof(struct rent), 1, a); //把a中一个rent结构体赋给RENT[i] }
printf("请输入借阅人:\n");
scanf("%s",user_name);
for (i = 0; i < user_number; i++)
{
if ((strcmp(user_name, RENT[i].username))==0)
{
a: printf("请输入要归还的碟片名:\n");
scanf("%s",cd_name);
for (j = 0; j < cd_number; j++)
{
if((strcmp(CD[j].film_name, cd_name))==0)
{
CD[j].n = 1;
break;
}
}
}
}
printf("借出日期:%d\n",RENT[i].rent_time);
printf("请输入归还日期:\n");
scanf("%d",&RENT[i].return_time);
getchar();
if (((RENT[i].return_time - RENT[i].rent_time) % 2)==0) //计算租金
{
//(每二天租金为1 不满两天以两天记)
RENT[i].money = (RENT[i].return_time - RENT[i].rent_time) / 3;
}
else
{
RENT[i].money = (RENT[i].return_time - RENT[i].rent_time) / 3 + 1;
}
printf("租金:%d\n",RENT[i].money);
printf("A: 再还一张\n");
printf("B: 退出\n");
scanf("%c",&choice);
getchar();
switch(choice)
{
case 'A': goto a;
break;
case 'B': return;
}
fclose(a);
fclose(b);
}
}
}
参考一下:https://blog.csdn.net/qq_43789285/article/details/90487852?utm_source=app&app_version=4.10.0
如有帮助,请采纳。