图书管理系统
1.1 前言
这个是我们大一上c语言的课设大作业,以二进制文件操作写一个图书管理系统
要求如下:
1.实现新进图书的信息录入
2.实现图书基本信息的查询
3.实现对图书信息的删除`
4.实现借书人办理注册
5.实现用户办理借书手续
6.实现用户办理还书手续
7.使用二进制文件方式存储数据,系统以菜单方式工作
1.2 语句
先来了解一些程序中常用到的语句
1.2.1 二进制文件操作语句
fwrite()
fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
将buffer中的数据写入文件stream中,写入count个项,输入完后跳过size大小
buffer 获取数据的地址
size 读取的大小
count 写入的项数
stream 写入的路径
fread()
fread ( void *buffer, size_t size, size_t count, FILE *stream) ;
从文件stream中读取数据,读取count个项,读入buffer中,读取完后跳过size大小
buffer 用于接收数据的地址
size 读取的大小
count 读取的项数
stream 读取的路径
!!!fwrite()和fread()操作完后会跳过size大小,在后面的修改数据有大用
fseek()
fseek(FILE *stream, long offset, int fromwhere);
设置指针stream指向以fromwhere为基准,偏移offset大小的位置(+为向下移,-为向上移)
在该程序中设置offset为文件大小,以便于在修改函数中将指针指向上一个数据
fopen()
FILE * fopen(const char * path, const char * mode);
FILE *fd = fopen(filename,"rb");
if(fd == NULL)
{
printf("打开失败");
exit(1); //0是正常退出,1是错误退出
}
path字符串是欲打开的文件路径和文件名
mode表示文件的打开方式
fclose()
用于关闭文件,有fopen一定就要有fclose
feof()
判断文件是否结束,使用这个函数来便利文件
原理:feof站在光标所在位置,向后看还有没有字符,如果有就返回0;如果没有就返回非0
1.2.2 system语句
1.system(“cls”) 清屏
2.system(“pause”) 暂停
1.2.3 模块思路
添加模块
思路:用fopen以二进制方式ab+打开文件,数据写入时在原内容后追加
tip:ab+表示以二进制文件方式打开,数据写入后在原内容追加,若为空文件则创建一个文件
删除模块
思路:用fopen以二进制方式rb+打开文件,再以wb+建立一个临时文件,用strcmp比较,再fwrite将原文件中除需要删除的数据以外的所有数据写入到临时文件中,然后remove删除原文件,将临时文件rename重新命名为原文件的名字
tip:rb+表示以二进制方式打开,打开文件后不会清空文件原内容,进行写入操作时会覆盖掉原有位置的内容
wb+表示以二进制方式打开,如果文件不存在则建立,若存在则以空文件形式覆盖原文件
查询模块
思路:用fopen以二进制方式rb+打开文件,fseek将指针指向开头,用while以fread为条件循环直至读到文件结尾,循环过程中用strcmp比较,如果读到的数据与输入的数据相同,则输出该数据
显示所有图书模块也是大差不差,利用while以!feof为条件一直从文件头读到文件结束,过程中用fread将数据循环输出
修改模块(借书,还书)
思路:用fopen以二进制方式rb+打开文件,fseek将指针位置移至文件开头,用fread将文件数据读到结构体中,再用strcmp将输入数据与结构体对比,如果相同则输出结构体信息,随后用strcpy将所需修改的内容写入结构体中,再用fseek将指针位置移至该数据开头,随后用fwrite把结构体的信息覆盖掉原数据,完成修改
tip:fread进程结束后会移动offset大小,利用fseek将指针位置移回数据开头位置,再用fwrite覆盖写入即可
2.1 模块
将程序模块化设计,把不同的功能模块化再组合在一起
1.添加模块
void Input() //录入图书
{
FILE *fp = NULL; //初始化指针
book nidi;
char flag = 'y';
fp = fopen("book1.data","ab+"); //ab+表示以二进制方式打开,数据写入时在原内容后追加
if (fp == NULL)
{
printf("打开失败!\n");
exit(1);
}
while((flag == 'y'))
{
system("cls");
printf("请输入书名:\n");
scanf("%s",&nidi.bname);
printf("请输入书籍id:\n");
scanf("%s",&nidi.bid);
printf("请输入单价:\n");
scanf("%f",&nidi.bprice);
printf("请输入作者:\n");
scanf("%s",&nidi.bauthor);
printf("请输入存在状态: \n(若无的话,填‘无’,下同)\n");
scanf("%s",&nidi.state);
printf("请输入借书人姓名:\n");
scanf("%s",&nidi.student);
printf("请输入性别:\n");
scanf("%s",&nidi.gender);
printf("请输入学号:\n");
scanf("%s",&nidi.num);
fwrite( &nidi, sizeof(book), 1, fp); //把nidi中的数据写入文件,分成1份,每块是book类型大小
printf("还要继续输入吗?继续的话请输入'y',否则返回主界面\n");
scanf("%c",&flag);
}
fclose(fp); //关闭文件
return;
}
2.删除模块
void Delete() //删除
{
system("cls");
book nid;
FILE* fp;
char a[10];
fp = fopen("book1.data","rb+"); //rb+和wb+的区别 对于rb+如果打开的文件不存在 会报错(返回NULL)
//对于wb+ 如果文件不存在则会建立,如果文件存在 会覆盖
if ( fp == NULL)
{
printf("打开失败!!\n");
exit(1);
}
printf("请输入图书ID:");
scanf("%s",a);
printf("删除成功\n");
fseek(fp, 0, SEEK_SET);
FILE* fp1;
fp1 = fopen("linshi.data", "wb+");
while(fread(&nid, sizeof(book), 1, fp)) //从fp中读数据
{
if ( strcmp(a, nid.bid) != 0) //不是要删除的内容
{
fwrite (&nid, sizeof(book), 1, fp1); //将除要删除外的数据写入fp1中
}
}
fclose(fp);
fclose(fp1);
remove("book1.data"); //删除原文件
rename("linshi.data", "book1.data"); //重命名为原文件
fflush(stdin);
return;
}
3.查询模块
void IDSearch() //ID查询
{
system("cls");
FILE *fp = NULL;
book nidi;
char a[10];
bool found = false;
printf("请输入图书编号\n");
scanf("%s",a);
fp = fopen("book1.data","rb+");
if (fp == NULL)
{
printf("打开失败! \n");
exit(1);
}
fseek(fp,0,SEEK_SET);
while (fread(&nidi, sizeof(book), 1, fp))
{
if (strcmp ( a, nidi.bid) == 0 )
{
printf("书名: %s\n",nidi.bname);
printf("编号: %s\n",nidi.bid);
printf("单价: %.1f\n",nidi.bprice);
printf("作者: %s\n",nidi.bauthor);
printf("存在状态: %s\n",nidi.state);
printf("借书人姓名: %s\n",nidi.student);
printf("性别: %s\n",nidi.gender);
printf("学号: %s\n",nidi.num);
found = true;
break;
}
}
fclose(fp);
if (!found)
{
printf("没有该图书!");
}
system("pause");
SearchMenu();
}
4.修改模块
void Borrow() //借书
{
system("cls");
FILE *fp = NULL;
book nidi;
char a[10];
bool found = false;
int sta = -1;
printf("请输入所要借的图书编号\n");
scanf("%s",a);
fp = fopen("book1.data","rb+");
if (fp == NULL)
{
printf("打开失败! \n");
exit(1);
}
fseek(fp,0,SEEK_SET); //移动文件读写指针位置
while (fread(&nidi, sizeof(book), 1, fp)) //从fp中读取数据
{
if (strcmp ( a, nidi.bid) == 0 ) //strcmp相同返回0
{
printf("书名: %s\n",nidi.bname);
printf("编号: %s\n",nidi.bid);
printf("单价: %.1f\n",nidi.bprice);
printf("作者: %s\n",nidi.bauthor);
printf("存在状态: %s\n",nidi.state);
printf("借书人姓名: %s\n",nidi.student);
printf("性别: %s\n",nidi.gender);
printf("学号: %s\n",nidi.num);
if(strcmp (nidi.state, "1") == 0)
{
printf("该图书已被借出\n");
}else{
printf("如若借该书请输入'0'\n输入其他即取消\n");
scanf("%d",&sta);
if ( sta == 0)
{
strcpy(nidi.state, "1");
printf("请输入您的姓名:\n");
scanf("%s", nidi.student);
printf("请输入您的性别:\n");
scanf("%s", nidi.gender);
printf("请输入您的学号:\n");
scanf("%s", nidi.num);
fseek(fp, -sizeof(book), SEEK_CUR); //为负值,则向上移动
fwrite(&nidi, sizeof(book), 1, fp);
printf("借书成功!\n");
fclose(fp);
}
}
found = true;
break; // 找到匹配的书籍后立即退出循环
}
}
fclose(fp);
if (!found) // 没有找到匹配的书籍
{
printf("没有该图书!");
}
system("pause");
Play();
}
3.源码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
typedef struct Book //创建结构体
{
char bname[30];//书名
char bid[10];//书编号
float bprice;//单价
char bauthor[10];//作者
char state[6];//存在状态
char student[10];//借书人姓名
char gender[4];//性别
char num[13];//学号
}book;
typedef struct User
{
char name[30]; //用户名
char password[30]; //密码
}user;
void Menu(); //主页面
void Choice(); //主页面用户交互
void BookControl(); //书籍管理
void Choice2(); //书籍管理用户交互
void Input(); //书籍登记
void Delete(); //书籍删除
void SearchMenu(); //查询书籍
void Choice1(); //查询书籍用户交互
void IDSearch(); //ID查询
void NameSearch(); //书名查询
void AuthorSearch(); //作者查询
void AllSearch(); //查询所有书籍
void UserControl(); //用户管理
void Choice3(); //用户管理用户交互
void Registe(); //用户注册
void Load(); //用户登录
void Play(); //借书还书
void Choice4(); //借书还书用户交互
void Borrow(); //借书
void Return(); //还书
void DeleteUser(); //用户注销
void Menu() //菜单管理
{
system("cls");
printf("*****************************************\n");
printf("*\t\t0.退出系统\t\t*\n");
printf("*\t\t1.查询书籍\t\t*\n");
printf("*\t\t2.书籍管理\t\t*\n");
printf("*\t\t3.用户管理\t\t*\n");
printf("*****************************************\n");
printf("请输入一个数<0-3>\n");
}
void Choice() //主界面用户交互
{
int choice = 0;
printf("请输入选项:");
scanf("%d",&choice);
switch(choice){
case 0:
printf("退出成功\n");
exit(0);
break;
case 1:
SearchMenu();
break;
case 2:
BookControl();
break;
case 3:
UserControl();
break;
default:
printf("错误!请输入0-3\n");
break;
}
}
void BookControl() //书籍管理
{
system("cls");
printf("*****************************************\n");
printf("*\t\t0.返回上一级\t\t*\n");
printf("*\t\t1.录入书籍\t\t*\n");
printf("*\t\t2.删除书籍\t\t*\n");
printf("*****************************************\n");
printf("请输入一个数<0-2>\n");
Choice2();
}
void Choice2() //书籍管理用户交互
{
int choice = 0;
printf("请输入选项:");
scanf("%d",&choice);
switch(choice){
case 0:
Menu();
break;
case 1:
Input();
break;
case 2:
Delete();
break;
default:
printf("错误!请输入0-3\n");
break;
}
}
void Input() //录入图书
{
FILE *fp = NULL; //初始化指针23
book nidi;
char flag = 'y';
fp = fopen("book1.data","ab+"); //ab+表示以二进制方式打开,数据写入时在原内容后追加
if (fp == NULL)
{
printf("打开失败!\n");
exit(1);
}
while((flag == 'y'))
{
system("cls");
printf("请输入书名:\n");
scanf("%s",&nidi.bname);
printf("请输入书籍id:\n");
scanf("%s",&nidi.bid);
printf("请输入单价:\n");
scanf("%f",&nidi.bprice);
printf("请输入作者:\n");
scanf("%s",&nidi.bauthor);
printf("请输入存在状态: \n(若无的话,填‘无’,下同)\n");
scanf("%s",&nidi.state);
printf("请输入借书人姓名:\n");
scanf("%s",&nidi.student);
printf("请输入性别:\n");
scanf("%s",&nidi.gender);
printf("请输入学号:\n");
scanf("%s",&nidi.num);
fwrite( &nidi, sizeof(book), 1, fp); //把nidi中的数据写入文件,分成1份,每块是book类型大小
//fflush(stdin); //刷新缓冲区
printf("还要继续输入吗?继续的话请输入'y',否则返回主界面\n");
scanf("%c",&flag);
}
fclose(fp); //关闭文件
return;
}
void Delete() //删除
{
system("cls");
book nid;
FILE* fp;
char a[10];
fp = fopen("book1.data","rb+"); //rb+和wb+的区别 对于rb+如果打开的文件不存在 会报错(返回NULL)
//对于wb+ 如果文件不存在则会建立,如果文件存在 会覆盖
if ( fp == NULL)
{
printf("打开失败!!\n");
exit(1);
}
printf("请输入图书ID:");
scanf("%s",a);
printf("删除成功\n");
fseek(fp, 0, SEEK_SET);
FILE* fp1;
fp1 = fopen("linshi.data", "wb+");
while(fread(&nid, sizeof(book), 1, fp)) //从fp中读数据
{
if ( strcmp(a, nid.bid) != 0) //不是要删除的内容
{
fwrite (&nid, sizeof(book), 1, fp1); //将除要删除外的数据写入fp1中
}
}
fclose(fp);
fclose(fp1);
remove("book1.data"); //删除原文件
rename("linshi.data", "book1.data"); //重命名为原文件
fflush(stdin);
return;
}
void SearchMenu() //查询界面
{
system("cls");
printf("*************************************************\n");
printf("*\t\t0.返回上一级\t\t\t*\n");
printf("*\t\t1.按书籍名称查询\t\t*\n");
printf("*\t\t2.按书籍编号查询\t\t*\n");
printf("*\t\t3.按书籍作者查询\t\t*\n");
printf("*\t\t4.显示所有书籍\t\t\t*\n");
printf("*************************************************\n");
printf("请输入一个数<0-3>\n");
Choice1();
}
void Choice1() //查询界面用户交互
{
int choice = 0;
printf("请输入选项:");
scanf("%d",&choice);
switch(choice){
case 0:
Menu();
break;
case 1:
NameSearch();
break;
case 2:
IDSearch();
break;
case 3:
AuthorSearch();
break;
case 4:
AllSearch();
break;
default:
printf("错误!请输入0-3\n");
break;
}
}
void IDSearch() //ID查询
{
system("cls");
FILE *fp = NULL;
book nidi;
char a[10];
bool found = false;
printf("请输入图书编号\n");
scanf("%s",a);
fp = fopen("book1.data","rb+");
if (fp == NULL)
{
printf("打开失败! \n");
exit(1);
}
fseek(fp,0,SEEK_SET);
while (fread(&nidi, sizeof(book), 1, fp))
{
if (strcmp ( a, nidi.bid) == 0 )
{
printf("书名: %s\n",nidi.bname);
printf("编号: %s\n",nidi.bid);
printf("单价: %.1f\n",nidi.bprice);
printf("作者: %s\n",nidi.bauthor);
printf("存在状态: %s\n",nidi.state);
printf("借书人姓名: %s\n",nidi.student);
printf("性别: %s\n",nidi.gender);
printf("学号: %s\n",nidi.num);
found = true;
break;
}
}
fclose(fp);
if (!found)
{
printf("没有该图书!");
}
system("pause");
SearchMenu();
}
void NameSearch() //书名查询
{
system("cls");
FILE *fp = NULL;
book nidi;
char a[30];
bool found = false;
printf("请输入图书名字\n");
scanf("%s",a);
fp = fopen("book1.data","rb+");
if (fp == NULL)
{
printf("打开失败! \n");
exit(1);
}
fseek(fp,0,SEEK_SET);
while (fread(&nidi, sizeof(book), 1, fp))
{
if (strcmp ( a, nidi.bid) == 0 )
{
printf("书名: %s\n",nidi.bname);
printf("编号: %s\n",nidi.bid);
printf("单价: %.1f\n",nidi.bprice);
printf("作者: %s\n",nidi.bauthor);
printf("存在状态: %s\n",nidi.state);
printf("借书人姓名: %s\n",nidi.student);
printf("性别: %s\n",nidi.gender);
printf("学号: %s\n",nidi.num);
found = true;
break;
}
}
fclose(fp);
if (!found)
{
printf("没有该图书!\n");
}
system("pause");
SearchMenu();
}
void AuthorSearch() //作者查询
{
system("cls");
FILE *fp = NULL;
book nidi;
char a[10];
bool found = false;
printf("请输入图书作者\n");
scanf("%s",a);
fp = fopen("book1.data","rb+");
if (fp == NULL)
{
printf("打开失败! \n");
exit(1);
}
fseek(fp,0,SEEK_SET);
while (fread(&nidi, sizeof(book), 1, fp))
{
if (strcmp ( a, nidi.bid) == 0 )
{
printf("书名: %s\n",nidi.bname);
printf("编号: %s\n",nidi.bid);
printf("单价: %.1f\n",nidi.bprice);
printf("作者: %s\n",nidi.bauthor);
printf("存在状态: %s\n",nidi.state);
printf("借书人姓名: %s\n",nidi.student);
printf("性别: %s\n",nidi.gender);
printf("学号: %s\n",nidi.num);
found = true;
break;
}
}
fclose(fp);
if (!found) // 没有找到匹配的书籍
{
printf("没有该图书!");
}
system("pause");
SearchMenu();
}
void AllSearch() //所有书籍显示
{
system("cls");
FILE *fp = NULL;
book nidi;
fp = fopen("book1.data", "rb+");
if (fp == NULL)
{
printf("打开失败! \n");
exit(1);
}
printf("书名\t编号\t单价\t作者\t状态\t姓名\t性别\t学号\n");
fseek(fp, 0, SEEK_SET);
while (!feof(fp)) //如果文件没有结束则返回非0值
{
if (fread(&nidi, sizeof(book), 1, fp))
{
printf("%s\t%s\t%.1f\t%s\t%s\t%s\t%s\t%s\n",nidi.bname, nidi.bid, nidi.bprice, nidi.bauthor, nidi.state, nidi.student, nidi.gender, nidi.num);
}
}
fclose(fp);
return;
}
void UserControl()
{
system("cls");
printf("*****************************************\n");
printf("*\t\t0.返回上一级\t\t*\n");
printf("*\t\t1.学生登录\t\t*\n");
printf("*\t\t2.注册\t\t\t*\n");
printf("*\t\t3.注销\t\t\t*\n");
printf("*****************************************\n");
printf("请输入一个数<0-3>\n");
Choice3();
}
void Choice3() //登录界面用户交互
{
int choice = 0;
printf("请输入选项:");
scanf("%d",&choice);
switch(choice){
case 0:
Menu();
break;
case 1:
Load();
break;
case 2:
Registe();
break;
case 3:
DeleteUser();
break;
default:
printf("错误!请输入0-2\n");
break;
}
}
void Registe() //用户注册
{
system("cls");
user nidia;
FILE* fp = NULL;
char name[10];
fp = fopen("user.data","ab+");
int i = 0;
if ( fp == NULL)
{
printf("打开失败!\n");
exit(1);
}
printf("请输入用户名\n");
scanf("%s",name);
if( strcmp( name, nidia.name) == 0)
{
printf("该用户名存在\n");
}else{
strcpy( nidia.name, name);
printf("请输入密码\n");
scanf("%s",&nidia.password);
printf("注册成功!!\n");
fwrite ( &nidia, sizeof(user), 1, fp);
fclose(fp);
}
system("pause");
UserControl();
}
void Load() //用户登录
{
system ("cls");
FILE* fp = NULL;
char z[31],m[31];
user nidi;
int i = 3;
fp = fopen("user.data","rb+");
if ( fp == NULL)
{
printf("打开失败!\n");
exit(1);
}
fseek( fp, 0, SEEK_SET);
while ( fread( &nidi, sizeof(user), 1, fp) != 0)
{
printf("请输入用户名:\n");
scanf("%s",z);
if (!strcmp(z,nidi.name))
{
printf("请输入密码:\n你有三次机会\n");
while (i != 0)
{
scanf("%s",m);
if (!strcmp(m,nidi.password)) {
printf("登录成功!\n");
i = 0;
Play();
}else{
printf("密码错误!\n");
i--;
}
}
} else {
printf("帐号不存在!\n");
}
}
fclose(fp);
return;
}
void DeleteUser() //用户注销
{
system("cls");
user nid;
FILE* fp;
char a[30];
fp = fopen("user.data","rb+");
if ( fp == NULL)
{
printf("打开失败!!\n");
exit(1);
}
printf("请输入名字:");
scanf("%s",a);
printf("删除成功\n");
fseek(fp, 0, SEEK_SET);
FILE* fp1;
fp1 = fopen("linshi.data", "wb+");
while(fread(&nid, sizeof(user), 1, fp))
{
if ( strcmp(a, nid.name) != 0)
{
fwrite (&nid, sizeof(user), 1, fp1);
}
}
fclose(fp);
fclose(fp1);
remove("user.data");
rename("linshi.data", "user.data");
fflush(stdin);
return;
}
void Play() //借书还书
{
system("cls");
printf("*****************************************\n");
printf("*\t\t0.返回上一级\t\t*\n");
printf("*\t\t1.办理借书手续\t\t*\n");
printf("*\t\t2.办理还书手续\t\t*\n");
printf("*****************************************\n");
printf("请输入一个数<0-2>\n");
Choice4();
}
void Choice4() //借书还书用户交互
{
int choice = 0;
printf("请输入选项:");
scanf("%d",&choice);
switch(choice){
case 0:
UserControl();
break;
case 1:
Borrow();
break;
case 2:
Return();
break;
default:
printf("错误!请输入0-2\n");
break;
}
}
void Borrow() //借书
{
system("cls");
FILE *fp = NULL;
book nidi;
char a[10];
bool found = false;
int sta = -1;
printf("请输入所要借的图书编号\n");
scanf("%s",a);
fp = fopen("book1.data","rb+");
if (fp == NULL)
{
printf("打开失败! \n");
exit(1);
}
fseek(fp,0,SEEK_SET); //移动文件读写指针位置
while (fread(&nidi, sizeof(book), 1, fp)) //从fp中读取数据
{
if (strcmp ( a, nidi.bid) == 0 ) //strcmp相同返回0
{
printf("书名: %s\n",nidi.bname);
printf("编号: %s\n",nidi.bid);
printf("单价: %.1f\n",nidi.bprice);
printf("作者: %s\n",nidi.bauthor);
printf("存在状态: %s\n",nidi.state);
printf("借书人姓名: %s\n",nidi.student);
printf("性别: %s\n",nidi.gender);
printf("学号: %s\n",nidi.num);
if(strcmp (nidi.state, "1") == 0)
{
printf("该图书已被借出\n");
}else{
printf("如若借该书请输入'0'\n输入其他即取消\n");
scanf("%d",&sta);
if ( sta == 0)
{
strcpy(nidi.state, "1");
printf("请输入您的姓名:\n");
scanf("%s", nidi.student);
printf("请输入您的性别:\n");
scanf("%s", nidi.gender);
printf("请输入您的学号:\n");
scanf("%s", nidi.num);
fseek(fp, -sizeof(book), SEEK_CUR);
fwrite(&nidi, sizeof(book), 1, fp);
printf("借书成功!\n");
fclose(fp);
}
}
found = true;
break; // 找到匹配的书籍后立即退出循环
}
}
fclose(fp);
if (!found) // 没有找到匹配的书籍
{
printf("没有该图书!");
}
system("pause");
Play();
}
void Return() //还书
{
system("cls");
FILE *fp = NULL;
book nidi;
char a[10];
bool found = false;
int sta = -1;
printf("请输入所要还的图书编号\n");
scanf("%s",a);
fp = fopen("book1.data","rb+");
if (fp == NULL)
{
printf("打开失败! \n");
exit(1);
}
fseek(fp,0,SEEK_SET); //移动文件读写指针位置
while (fread(&nidi, sizeof(book), 1, fp)) //从fp中读取数据
{
if (strcmp ( a, nidi.bid) == 0 ) //strcmp相同返回0
{
printf("书名: %s\n",nidi.bname);
printf("编号: %s\n",nidi.bid);
printf("单价: %.1f\n",nidi.bprice);
printf("作者: %s\n",nidi.bauthor);
printf("存在状态: %s\n",nidi.state);
printf("借书人姓名: %s\n",nidi.student);
printf("性别: %s\n",nidi.gender);
printf("学号: %s\n",nidi.num);
if(strcmp (nidi.state, "1") == 0)
{
printf("如若还该书请输入'0'\n输入其他即取消\n");
scanf("%d",&sta);
if ( sta == 0)
{
strcpy(nidi.state, "0");
strcpy(nidi.gender, "0");
strcpy(nidi.student, "0");
strcpy(nidi.num, "0");
fseek(fp, -sizeof(book), SEEK_CUR);
fwrite(&nidi, sizeof(book), 1, fp);
printf("还书成功!\n");
system("pause");
fclose(fp);
}
}
found = true;
break;
}
}
fclose(fp);
if (!found)
{
printf("没有该图书!");
}
system("pause");
Play();
}
int main(int argc, char *argv[])
{
while (1)
{
Menu();
Choice();
system("pause");
system("cls");
}
return 0;
}
4.总结
程序方面大同小异,都是由4个主要模块进行调整修改,这个程序不足的地方就是冗余,在函数调用返回上一个函数的过程中有大问题
·