程序设计综合实验
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
#define MAX 100
#define password "12138520"
struct reader
{
int num;
char name[MAX];
int bookborrowed;
}READER;
struct book
{
int num;
char name[MAX];
char writer[MAX];
int amount;
}BOOK;
typedef struct readers{
char name[MAX];
struct readers *next;
}READERS;
READERS *head=NULL;
void printreader(); //打印读者信息
void welcome();
int adminland(); //[管理员输入密码登录]
char land(); // [主页面的输入判断]
char adminchoice(); // [功能选择的输入判断]
int manageruse(); // [管理员入口] 返回值:0表示返回主页面,1表示继续执行本函数
void printbook(); // [打印图书信息]
void addbook(); // [注册新图书]
void modbook(); // [修改现存图书信息]
void delbook(); // [注销现存图书]
int readeruse(); // [读者入口] 返回值:0表示返回主页面,1表示继续执行本函数
void lookupbook(); // [查找图书]
void borrowbook(); // [借阅图书]
void returnbook(); // [归还图书]
void borrowedbook(); // [查看已借阅情况]
void addreader(); //录入读者
void modreader(); //修改读者信息
void delreader(); //删除读者信息
int main(){
welcome();
return 0;
}
// [主页面入口]
void welcome(){
char flag;
printf("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&欢迎使用图书管理系统&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
while(1){
printf("\n******************************欢迎进入主页面************************************\n");
printf("^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^~^~^~^~\n");
printf("\t\t\t☆ 1: 管理员入口\n\t\t\t☆ 2: 读者入口\n\t\t\t☆ 0: 退出系统\n");
printf("请选择:\n");
printf("^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^^~^~^~^~\n");
switch(land()){
case '1':
flag=adminland();
if(flag){
while(1){
if(manageruse()){
continue;
}
else{
break;
}
}
}
else{
exit(0);
}
break;
case '2':
printf("*******************************************************************************\n");
printf("请先检查您是否已成为本图书馆的会员,否则是无法继续操作的哦亲,可联系图书管理员查询并注册哦亲,输入0可退出操作!\n");
printf("*******************************************************************************\n");
while(1){
if(readeruse()){
continue;
}
else{
break;
}
}
break;
case '0':
printf("已退出系统,祝你学习愉快 Y(^_^)Y\n");
exit(0);//正常退出
default:
break;
}
}
}
// [主页面的输入判断]
char land(){
char c, flag;
int i;
while(1){
for(i = 0; (c = getchar()) != '\n'; flag = c, ++i);
if(i == 1){
if(flag == '1' || flag == '2' || flag == '0'){
return flag;
}
}else if(i == 0){
continue;
}
printf("错误输入哦亲!!!请选择1/2/0:");
}
return '\0';
}
//管理员的登录
int adminland()
{
char pass[9];
int count=4;
printf("*********************************管理员登录界面**********************************\n");
printf("请输入管理员密码:");
gets(pass);
while(count>0){
if(strcmp(pass,password) == 0){
break;
}
else{
printf("密码错误!请重新输入,您还有%d次机会:",count);
gets(pass);
count--;
}
}
if(count > 0){
printf("*******************************************************************************\n");
return 1;
}
else{
printf("输入密码错误五次,已为您自动退出系统!");
return 0;
}
}
// [管理员功能选择的输入判断]
char adminchoice(){
char c, flag;
int i;
while(1){
for(i = 0; (c = getchar()) != '\n'; flag = c, ++i);
if(i == 1){
if(flag == '1' || flag == '2' || flag == '3' || flag == '4' || flag == '5' || flag == '6' || flag == '7' || flag == '8' || flag == '0' || flag == '9'){
return flag;
}
}else if(i == 0){
continue;
}
printf("非法输入!!!请选择:1/2/3/4/5/6/7/8/0");
}
return '\0';
}
// [读者功能选择的输入判断]
char readerchoice(){
char c,flag;
int i;
while(1){
for(i = 0; (c = getchar()) != '\n'; flag = c, ++i);
if(i == 1){
if(flag == '1' || flag == '2' || flag == '3' || flag == '4' || flag == '0'){
return flag;
}
}
else{
continue;
}
printf("非法输入!!!请选择:1/2/3/4/0");
}
return '\0';
}
// [管理员入口] 返回值0表示返回主页面,1表示继续执行本函数
int manageruse(){
while(1){
printf("\n****************************欢迎进管理员功能操作页面****************************\n");
printf("^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^~^~^~^~\n");
printf("\t\t\t☆ 1:打印图书信息\n\t\t\t☆ 2:注册新图书\n\t\t\t☆ 3:修改现存图书信息\n\t\t\t☆ 4:注销现存图书\n\t\t\t☆ 5:录入新的读者\n\t\t\t☆ 6:修改读者信息\n\t\t\t☆ 7:旧读者的删除\n\t\t\t☆ 8:查询指定图书\n\t\t\t☆ 9:打印读者信息\n\t\t\t☆ 0:返回主页面\n");
printf("请选择:\n");
printf("^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^~^~^~^~\n");
switch(adminchoice()){
case '1':
printbook();
break;
case '2':
addbook();
break;
case '3':
modbook();
break;
case '4':
delbook();
break;
case '5':
addreader();
break;
case '6':
modreader();
break;
case '7':
delreader();
break;
case '8':
lookupbook();
break;
case '9':
printreader();
break;
case '0':
return 0;
default:
break;
}
break;
}
return 1;
}
//[打印读者信息]
void printreader()
{
FILE *reader;
printf("*********************************打印读者信息**********************************\n");
if((reader=fopen("reader1.txt","r")) == NULL){
printf("您的图书馆里一个读者也没有哦,要努力哦亲!\n");
}
else{
printf("读者编号\t读者名字\t所借图书编号\t\n");
while(!feof(reader)){
fscanf(reader,"%d %s %d\n",&READER.num,READER.name,&READER.bookborrowed);
printf("%d%20s%20d\n",READER.num,READER.name,READER.bookborrowed);
}
}
printf("*******************************************************************************\n");
fclose(reader);
}
//[打印图书信息]
void printbook()
{
FILE *book;
printf("*********************************打印图书信息**********************************\n");
if((book = fopen("book1.txt","r")) ==NULL)
{
printf("抱歉!您的图书馆里一本书都没有了!\n");
}
else
{
printf("第一列为图书编号,第二列为图书名,第三列为图书作者,第四列为图书馆内存数:\n");
while(!feof(book)){
fscanf(book,"%d %s %s %d\n",&BOOK.num,BOOK.name,BOOK.writer,&BOOK.amount);
printf("%d%20s%20s%10d\n",BOOK.num,BOOK.name,BOOK.writer,BOOK.amount);
}
}
printf("*******************************************************************************\n");
fclose(book);
}
//[录入新书]
void addbook()
{
FILE *book;
char name[MAX],writer[MAX];
int amount;
book=fopen("book1.txt","r+");
printf("*********************************添加新图书**********************************\n");
printf("请输入新图书的信息(书名,作者,数量)中间用逗号分割\n");
scanf("%s %s %d",name,writer,&amount);
while(!feof(book)){
fscanf(book,"%d %s %s %d\n",&BOOK.num,BOOK.name,BOOK.writer,&BOOK.amount);
}
fprintf(book,"%d %s %s %d\n",BOOK.num+1,name,writer,amount);
getchar();
printf("你已成功把新书存入图书馆!\n");
printf("*******************************************************************************\n");
fclose(book);
}
//[修改书籍信息]
void modbook()
{
int booknum,bookamount,flag=0;
char bookname[MAX],bookwriter[MAX];
FILE *book=fopen("book1.txt","r");
FILE *tempbook=fopen("tempbook.txt","w");
printf("*********************************添加新图书**********************************\n");
printf("请输入要修改的图书的编号以及新的信息(书名、作者、数量),中间用逗号分割\n");
scanf("%d %s %s %d",&booknum,bookname,bookwriter,&bookamount);
while(!feof(book)){
fscanf(book,"%d %s %s %d\n",&BOOK.num,BOOK.name,BOOK.writer,&BOOK.amount);
if(booknum != BOOK.num){
fprintf(tempbook,"%d %s %s %d\n",BOOK.num,BOOK.name,BOOK.writer,BOOK.amount);
}
else{
flag=1;
fprintf(tempbook,"%d %s %s %d\n",BOOK.num,bookname,bookwriter,bookamount);
}
}
if(flag==1){
printf("恭喜你,修改图书信息成功了亲!\n");
}
else{
printf("图书馆里没有这本书哦,请重新输入!!!\n");
}
printf("*******************************************************************************\n");
fclose(book);
fclose(tempbook);
remove("book1.txt");
rename("tempbook.txt","book1.txt");
}
//[删除书籍信息]
void delbook(){
int booknum;
FILE *book=fopen("book1.txt","r");
FILE *tempbook=fopen("tempbook.txt","w");
printf("*********************************删除图书**********************************\n");
printf("请输入要删除的图书的编号\n");
scanf("%d",&booknum);
while(!feof(book)){
fscanf(book,"%d %s %s %d\n",&BOOK.num,BOOK.name,BOOK.writer,&BOOK.amount);
if(BOOK.num == booknum){
continue;
}
else if(BOOK.num < booknum){
fprintf(tempbook,"%d %s %s %d\n",BOOK.num,BOOK.name,BOOK.writer,BOOK.amount);
}
else{
fprintf(tempbook,"%d %s %s %d\n",BOOK.num-1,BOOK.name,BOOK.writer,BOOK.amount);
}
}
printf("恭喜你,成功删除了这本该死的图书(@_@)!\n");
printf("*******************************************************************************\n");
fclose(book);
fclose(tempbook);
remove("book1.txt");
rename("tempbook.txt","book1.txt");
}
//[录入新读者]
void addreader(){
FILE *reader;
char newname[MAX];
int newborrowed;
reader = fopen("reader1.txt","r+");
printf("*************************************增加新读者******************************************\n");
printf("请输入新增的读者信息(姓名 所借图书编号):\n");
scanf("%s %d",newname,&newborrowed);
while(!feof(reader)){
fscanf(reader,"%d %s %d\n",&READER.num,READER.name,&READER.bookborrowed);
}
fprintf(reader,"%d %s %d\n",READER.num+1,newname,newborrowed);
printf("您已成功添加了一个新读者!\n");
printf("*******************************************************************************\n");
fclose(reader);
}
//[修改读者信息]
void modreader()
{
int readernum,newborrowed,flag=0;
char newname[MAX];
FILE *reader=fopen("reader1.txt","r");
FILE *tempreader=fopen("tempreader.txt","w");
printf("*******************************************************************************\n");
printf("请输入要修改读者的编号和新的信息(姓名和借阅的图书编号)中间用逗号分割:\n");
scanf("%d %s %d",&readernum,newname,&newborrowed);
while(!feof(reader))
{
fscanf(reader,"%d %s %d\n",&READER.num,READER.name,&READER.bookborrowed);
if(readernum != READER.num)
{
fprintf(tempreader,"%d %s %d\n",READER.num,READER.name,READER.bookborrowed);}
else
{
flag=1;
fprintf(tempreader,"%d %s %d\n",READER.num,newname,newborrowed);}
}
if(flag==1){
printf("您已成功修改了读者信息!\n");
}
else{
printf("该读者还没有成为本馆会员哦!!!!!\n");
}
printf("*******************************************************************************\n");
fclose(reader);
fclose(tempreader);
remove("reader1.txt");
rename("tempreader.txt","reader1.txt");
}
//[删除读者信息]
void delreader()
{
int readernum;
FILE *reader = fopen("reader1.txt","r");
FILE *tempreader = fopen("tempreader.txt","w");
printf("*******************************************************************************\n");
printf("请输入要删除的读者的编号,在此之前,您可以打印读者信息以确定该读者是否为本馆会员哦!:\n");
scanf("%d",&readernum);
while(!feof(reader)){
fscanf(reader,"%d %s %d\n",&READER.num,READER.name,&READER.bookborrowed);
if(READER.num == readernum){
continue;
}
else if(READER.num < readernum){
fprintf(tempreader,"%d %s %d\n",READER.num,READER.name,READER.bookborrowed);
}
else{
fprintf(tempreader,"%d %s %d\n",READER.num-1,READER.name,READER.bookborrowed);
}
}
printf("您已经成功删除了这个读者!\n");
printf("*******************************************************************************\n");
fclose(reader);
fclose(tempreader);
remove("reader1.txt");
rename("tempreader.txt","reader1.txt");
}
//[读者入口]
int readeruse()
{
printf("\n****************************欢迎进入学生功能操作页面****************************\n");
printf("^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^~^~^~^~\n");
printf("\t\t\t☆ 1:查找图书\n\t\t\t☆ 2:借阅图书\n\t\t\t☆ 3:归还图书\n\t\t\t☆ 4:查看已借阅情况\n\t\t\t☆ 0:返回主页\n");
printf("请选择:\n");
printf("^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^~^~^~^~\n");
switch(readerchoice()){
case '1':
lookupbook();
break;
case '2':
borrowbook();
break;
case '3':
returnbook();
break;
case '4':
borrowedbook();
break;
case '0':
return 0;
default:
break;
}
return 1;
}
//[查找指定图书信息]
void lookupbook()
{
FILE *book;
int booknum,choose,key=0;
char bookname[MAX];
printf("*********************************请按要求查找您需要的图书**********************************\n");
printf("请输入1或2:\n1.按编号查找\n2.按书名查找\n0.返回上一层\n");
scanf("%d",&choose);
book=fopen("book1.txt","r");
if(choose == 1){
printf("^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^~^~^~^~\n");
printf("请输入您想要查找的图书编号 ^-^ \n");
scanf("%d",&booknum);
while(!feof(book)){
fscanf(book,"%d %s %s %d\n",&BOOK.num,BOOK.name,BOOK.writer,&BOOK.amount);
if(booknum == BOOK.num )
{
printf("编号:%d\n",BOOK.num);
printf("书名:%s\n",BOOK.name);
printf("作者:%s\n",BOOK.writer);
printf("现存数量:%d\n",BOOK.amount);
key = 1;
break;
}
}
printf("^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^~^~^~^~\n");
}
if(choose == 2)
{
printf("^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^~^~^~^~\n");
printf("请输入您想要查找的图书名字 ^-^ \n");
scanf("%s",bookname);
while(!feof(book))
{
fscanf(book,"%d %s %s %d\n",&BOOK.num,BOOK.name,BOOK.writer,&BOOK.amount);
if(strcmp(bookname,BOOK.name) == 0)
{
printf("编号:%d\n",BOOK.num);
printf("书名:%s\n",BOOK.name);
printf("作者:%s\n",BOOK.writer);
printf("现存数量:%d\n",BOOK.amount);
booknum = BOOK.num;
key = 1;
break;
}
}
printf("^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^~^~^~^~\n");
}
if(choose == 0){
printf("您已成功返回上一层,欢迎再次访问!!!\n");
printf("^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^~^~^~^~\n");
}
else{
if(key == 0)
{
printf("查无此书,请重新查询\n");
printf("^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^~^~^~^~\n");
}
}
}
//[读者借阅图书]
void borrowbook(){
int booknum,readernum;
int flag = 1,flag1=0;
FILE *reader = fopen("reader1.txt","r");
FILE *tempreader = fopen("tempreader.txt","w");
FILE *book = fopen("book1.txt","r");
FILE *tempbook = fopen("tempbook.txt","w");
printf("^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^~^~^~^~\n");
printf("请输入您的会员编号和想要借阅的图书编号,中间用逗号分隔^-^:\n");
scanf("%d %d",&readernum,&booknum);
while(!feof(reader))
{
fscanf(reader,"%d %s %d\n",&READER.num,READER.name,&READER.bookborrowed);
if(readernum != READER.num){
fprintf(tempreader,"%d %s %d\n",READER.num,READER.name,READER.bookborrowed);
}
else if(READER.bookborrowed != 0){
flag=0;
fprintf(tempreader,"%d %s %d\n",READER.num,READER.name,READER.bookborrowed);
}
else{
fprintf(tempreader,"%d %s %d\n",READER.num,READER.name,booknum);
}
}
if(flag){
while(!feof(book))
{
fscanf(book,"%d %s %s %d\n",&BOOK.num,BOOK.name,BOOK.writer,&BOOK.amount);
if(booknum != BOOK.num){
fprintf(tempbook,"%d %s %s %d\n",BOOK.num,BOOK.name,BOOK.writer,BOOK.amount);
}
else if(BOOK.amount == 0)
{
fprintf(tempbook,"%d %s %s %d\n",BOOK.num,BOOK.name,BOOK.writer,BOOK.amount);
}
else{
flag1=1;
fprintf(tempbook,"%d %s %s %d\n",BOOK.num,BOOK.name,BOOK.writer,BOOK.amount-1);
}
}
if(flag1 == 1){
printf("恭喜您借阅成功!读书破万卷,下笔如有神!\n");
printf("^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^~^~^~^~\n");
}
else{
printf("您想要的书已经被借光了,谢谢光临!\n");
printf("^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^~^~^~^~\n");
}
}
else{
printf("借阅失败!您还有书没还哦,每人只能借一本书哦亲!\n");
printf("^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^~^~^~^~\n");
}
fclose(reader);
fclose(tempreader);
fclose(book);
fclose(tempbook);
remove("reader1.txt");
rename("tempreader.txt","reader1.txt");
remove("book1.txt");
rename("tempbook.txt","book1.txt");
}
//[读者还书]
void returnbook()
{
int readernum,booknum,flag = 1;
FILE *reader = fopen("reader1.txt","r");
FILE *tempreader = fopen("tempreader.txt","w");
FILE *book = fopen("book1.txt","r");
FILE *tempbook = fopen("tempbook.txt","w");
printf("^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^~^~^~^~\n");
printf("请输入你的会员编号:");
scanf("%d",&readernum);
while(!feof(reader))
{
fscanf(reader,"%d %s %d\n",&READER.num,READER.name,&READER.bookborrowed);
if(readernum != READER.num){
fprintf(tempreader,"%d %s %d\n",READER.num,READER.name,READER.bookborrowed);
}
else if(READER.bookborrowed == 0)
{
printf("您没有借书,所以不需要还书啊亲!\n");
fprintf(tempreader,"%d %s %d\n",READER.num,READER.name,READER.bookborrowed);
flag = 0;
}
else
{
fprintf(tempreader,"%d %s %d\n",READER.num,READER.name,0);
booknum = READER.bookborrowed;
}
}
while(!feof(book))
{
fscanf(book,"%d %s %s %d\n",&BOOK.num,BOOK.name,BOOK.writer,&BOOK.amount);
if(booknum != BOOK.num){
fprintf(tempbook,"%d %s %s %d\n",BOOK.num,BOOK.name,BOOK.writer,BOOK.amount);
}
else if(!flag){
fprintf(tempbook,"%d %s %s %d\n",BOOK.num,BOOK.name,BOOK.writer,BOOK.amount);
}
else{
fprintf(tempbook,"%d %s %s %d\n",BOOK.num,BOOK.name,BOOK.writer,BOOK.amount+1);
}
}
if(flag){
printf("还书成功!\n");
}
printf("^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^~^~^~^~\n");
fclose(reader);
fclose(tempreader);
fclose(book);
fclose(tempbook);
remove("reader1.txt");
rename("tempreader.txt","reader1.txt");
remove("book1.txt");
rename("tempbook.txt","book1.txt");
}
//[查询图书的被借阅情况]
void borrowedbook(){
READERS *p;
int booknum,flag=0;
FILE *reader = fopen("reader1.txt","r");
printf("^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^~^~^~^~\n");
printf("请输入您想要查询被借阅情况的图书编号哦亲!:");
scanf("%d",&booknum);
while(!feof(reader)){
fscanf(reader,"%d %s %d\n",&READER.num,READER.name,&READER.bookborrowed);
if(READER.bookborrowed == booknum){
flag=1;
p=(READERS*)malloc(sizeof(READERS));
strcpy(p->name,READER.name);
p->next=head;
head=p;
}
}
if(flag){
printf("有以下读者借阅了您想要的这本书哦亲!:\n");
while(head != NULL){
printf("%s\n",head->name);
head=head->next;
}
}
else{
printf("本图书馆未收藏这本书或这本书还没有人借阅哦亲!\n");
}
printf("^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^^~^~^~^~^~^~^~^~^~^~^~\n");
fclose(reader);
}

浙公网安备 33010602011771号