本文主要详细介绍了用C语言实现的图书管理系统。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。
本文分享了用C语言编写的图书管理系统的具体代码,供大家参考。具体内容如下
简介
C语言的一个大作业,送上来纪念下呵呵。文笔不是很好,很多东西混在一起,但是笔记还挺多的,希望能帮助到有需要的朋友。
题目要求
简单文件数据库-模拟图书馆管理系统
涉及的知识点:文件读写、内存管理、结构定义、基本数据结构、高级格式输入输出。
要求:
写一个程序模拟图书馆管理系统。用户分为管理员和读者两类,分别显示不同的文本格式菜单,通过相应的菜单项个数进行选择。读者菜单包括借书、还书、查询图书等功能。管理员菜单包括图书和读者信息的录入、修改和删除。图书信息至少应包括:编号、书名、数量,读者信息至少应包括:编号、名称、借阅图书。可以根据书名或书号查询图书信息,以及现在有哪些读者在借阅某本书。
命令行参数如下:
libsima(-u)xxxx
第一个参数是可执行程序的名称;第二个参数是用户身份,-a表示管理员,-u表示读者;第三个参数是用户名。
实现的功能
1 管理员:
管理图书:添加图书,修改图书名称和数量,删除图书。管理读者:添加读者,修改读者姓名,删除读者。一键查看所有图书信息(序号、书名、剩余数量),一键查看所有读者信息(序号、读者姓名、借阅图书)。查询单本书的详细信息:可以根据序号和书名进行搜索,向管理员显示该书的序号、书名、剩余数量和借阅的读者。
2 读者:
借书(同一时间只能借一本书)还书一键查看所有图书信息(序号、书名、剩余数量)。
readme
您需要从cmd命令行运行程序,如图所示(注意格式)
管理员:张
进入管理员菜单格式:可执行程序名-a张(只设置一个管理员,没有添加管理员的功能)。
进入阅读器菜单格式:可执行程序名-u阅读器名(需要先通过管理员添加阅读器)
默认情况下,生成的文件放在驱动器D的根目录下(有时中间的过渡文件可能不会被删除)。
Book.txt:存储图书信息Users.txt:存储读者信息
代码
# includestdio.h
#包含io.h
int bookNumber=1;//全局变量表示书的序列号
int users number=1;//表示阅读器编号
char回车;//接收换行符
//添加书的功能
void addBook(文件*书)
{
FILE * Book1//当文件和书籍都存在时,您需要创建一个新文件来更改信息
int judge name=0;//确定书是否已经存储。
int num=1,readNum,readNumber//书籍数量存储阅读的书籍数量和阅读的书籍序号。
char name[20]={0},readName[20]={0}。//存储书籍名称来临时存储读取的字符串名称。
Printf('请输入要添加的图书名称:');
for(int I=0;i20I) //从输入流中获取要添加的图书的名称。
{
如果(i==0)
scanf('%c%c ',enter,name[I]);
其他
scanf('%c ',name[I]);
If(name[i]==10) //将最后一个换行符改为null
{
name[I]=0;
打破;
}
}
If (access ('d:/book.txt ',f _ OK)==0)//access函数确定文件是否存在,返回值为0时使用的头文件为io。
{
judge name=1;
FILE *judge=fopen('d:/Book.txt ',' r ');//读取数据文件,了解这本书是否已经存在。
而(!法官)
{
fscanf(judge,' %d %s %d ',readNumber,readName,readNum);//因为readName已经表示了地址,所以不需要提取地址字符。
fscanf(judge,' \ n ');//读入换行符,为下一行的读取做准备。
If(strcmp(name,readName)==0) //发现这本书已经存在后跳出循环。
{
法官姓名=2;//为2时表示已经存在此书,需要新建一个文件来更改信息
打破;
}
}
fclose(法官);//关闭用于判断而打开的文件
书号=阅读数1;
if(judgeName==1)
Book=fopen('d:/Book.txt ',' a ');//文件存在且不存在相同书名时向后追加内容
else if(judgeName==2)
{
Book1=fopen('d:/Book1.txt ',' w ');//新建一个文件暂存书中的信息,最后再返回源文件中
Book=fopen('d:/Book.txt ',' r ');//只读打开原本的文件
}
}
其他
Book=fopen('d:/Book.txt ',' w ');//文件不存在时新建一个文件
如果(判断名2)
{
fprintf(Book,' %d %s %d\n ',bookNumber,name,num);//写入序号书名数量和换行符
书号;
fclose(书);
}
其他
{
而(!书)
{
fscanf(Book,' %d %s %d\n ',readNumber,readName,readNum);
if(strcmp(name,readName)==0)
fprintf(Book1,' %d %s %d\n ',readNumber,readName,read num 1);//写入序号书名数量一和换行符
其他
fprintf(Book1,' %d %s %d\n ',readNumber,readName,read num);//写入序号书名数量和换行符
}
书号;
fclose(书);//关闭文件
fclose(第一册);
Book1=fopen('d:/Book1.txt ',' r ');
Book=fopen('d:/Book.txt ',' w ');//刷新原文件,再次写入正确数据
而(!feof(第一册))
{
fscanf(Book1,' %d %s %d\n ',readNumber,readName,readNum);
fprintf(Book,' %d %s %d\n ',readNumber,readName,read num);
}
fclose(书);
fclose(第一册);
删除(' d:/book1。txt’);//删除原文件
//重命名(' d:/Book1.txt ',' d:/Book。txt’);//将更改后的文件改名为原数据文件
}
printf('添加成功!\ n’);
}
//修改图书信息函数
作废变更书(文件*书籍)
{
while(1)
{
char name[20]={0},readName[20]={0} .
printf('编辑图书信息\ n’);
printf('[-]\ n ');
printf('\t请选择需要修改的信息:\n 1 .修改图书名称\n 2 .修改图书数量\n 3 .返回主菜单\ n’);
printf('[-]\ n ');
(同Internationalorganizations)国际组织函数,readNumber,readNum,find=0;//功能选择读取到的序号读取到的数量是否找到此书
//判断修改后的书名是否和原有的重复
Book=fopen('d:/Book.txt ',' r ');//只读打开原文件
int ifNumber
char ifName[20]={ 0 };
FILE *如果用户存在=fopen(' d:/users 1。txt ',' w ');
而(!书)
{
fscanf(Book,' %d %s %d\n ',ifNumber,ifName,ifNum);
fprintf(ifUserExisted,' %d %s %d\n ',ifNumber,ifName,ifNum);
}
fclose(如果用户存在);
fclose(书);
scanf('%d ',函数);
如果(函数==3)
{
删除(' d:/book1。txt’);//有时会多余创造了文件,需要删除
返回;
}
Book=fopen('d:/Book.txt ',' r ');//只读打开原文件
FILE *Book1=fopen('d:/Book1.txt ',' w ');//先新建一个文件存储更改后的信息
printf('请输入需要更改的图书名:');
for(int I=0;i20i ) //从输入流取得需要添加的书本名字
{
如果(i==0)
scanf('%c%c ',enter,name[I]);
其他
scanf('%c ',name[I]);
if(name[i]==10) //将最后的换行符改为空
{
name[I]=0;
打破;
}
}
如果(函数==1)
{
而(!书)
{
fscanf(Book,' %d %s %d\n ',readNumber,readName,readNum);
if(strcmp(name,readName)==0)
{
find=1;//找到了此书
printf('您要将书名%s更改为:',名称);
字符更改名称[20]={ 0 };
for(int I=0;i20i ) //从输入流取得需要更改的书本名字
{
如果(i==0)
scanf('%c ',更改名称[I]);
其他
scanf('%c ',更改名称[I]);
if(changeName[i]==10) //将最后的换行符改为空
{
更改名称[I]=0;
打破;
}
}
如果用户存在=fopen(' d:/users 1。txt ',' r ');//判断更改后的名字是否会和已存在的书名冲突
而(!feof(如果用户存在))
{
fscanf(ifUserExisted,' %d %s %d\n ',ifNumber,ifName,ifNum);
if (strcmp(changeName,ifName)==0)
{
printf('更改失败:已存在名称为%s的图书\n ',更改名称);
fclose(如果用户存在);
fclose(书);//关闭文件
fclose(第一册);
返回;
}
}
fprintf(Book1,' %d %s %d\n ',readNumber,changeName,read num);//写入序号更改后的书名数量和换行符
}
其他
fprintf(Book1,' %d %s %d\n ',readNumber,readName,read num);//写入序号书名数量和换行符
}
if(find==0) //若没找到此书
{
printf('没有找到此书!请重新输入\ n’);
打破;
}
fclose(书);//关闭文件
fclose(第一册);
Book1=fopen('d:/Book1.txt ',' r ');
Book=fopen('d:/Book.txt ',' w ');//刷新原文件,再次写入正确数据
而(!feof(第一册))
{
fscanf(Book1,' %d %s %d\n ',readNumber,readName,readNum);
fprintf(Book,' %d %s %d\n ',readNumber,readName,read num);
}
fclose(书);
fclose(第一册);
删除(' d:/book1。txt’);//删除原文件
//重命名(' d:/Book1.txt ',' d:/Book。txt’);//将更改后的文件改名为原数据文件此方法成功率低!
printf('更改成功!\ n’);
}
else if(function==2)
{
而(!书)
{
fscanf(Book,' %d %s %d\n ',readNumber,readName,readNum);
if(strcmp(name,readName)==0)
{
find=1;//找到了此书
printf('您要将数量%d更改为:',读num);
int new num=0;
scanf('%d ',新编号);
fprintf(Book1,' %d %s %d\n ',readNumber,readName,new num);//写入序号书名更改后的数量和换行符
}
其他
fprintf(Book1,' %d %s %d\n ',readNumber,readName,read num);//写入序号书名数量和换行符
}
if(find==0) //若没找到此书
{
printf('没有找到此书!请重新输入');
打破;
}
fclose(书);//关闭文件
fclose(第一册);
Book1=fopen('d:/Book1.txt ',' r ');
Book=fopen('d:/Book.txt ',' w ');//刷新原文件,再次写入正确数据
而(!feof(第一册))
{
fscanf(Book1,' %d %s %d\n ',readNumber,readName,readNum);
fprintf(Book,' %d %s %d\n ',readNumber,readName,read num);
}
fclose(书);
fclose(第一册);
删除(' d:/book1。txt’);//删除原文件
//重命名(' d:/Book1.txt ',' d:/Book。txt’);//将更改后的文件改名为原数据文件此方法易出现问题!
printf('更改成功!\ n’);
}
其他
{
printf('输入格式有误,请重新输入!');
打破;
}
}
}
//删除书籍的函数
作废戴尔布克(文件*书)
{
while(1)
{
printf('请输入您想删除的图书名:(输入-r返回上一级)');
char del name[20]={ 0 };
for(int I=0;i20i ) //从输入流取得需要删除的书本名字
{
//if(i==0)
//scanf('%c%c ',enter,del name[I]);
//否则
scanf('%c ',delName[I]);
if(delName[i]==10) //将最后的换行符改为空
{
del name[I]=0;
打破;
}
}
if(strcmp(delName,'-r')==0) //输入返回上一级的指示后返回
返回;
int readNumber,readNum,find=0;
char readName[20]={ 0 };
Book=fopen('d:/Book.txt ',' r ');
FILE *Book1=fopen('d:/Book1.txt ',' w ');
而(!书)
{
fscanf(Book,' %d %s %d\n ',readNumber,readName,readNum);
if(strcmp(delName,readName)==0)
{
find=1;//找到了此书
//因为要删除此条信息,所以不再向新文件中输出它
}
其他
{
if(find==1)
fprintf(Book1,' %d %s %d\n ',readNumber-1,readName,read num);//排在删除后的写入-1的序号书名数量和换行符
其他
fprintf(Book1,' %d %s %d\n ',readNumber,readName,read num);//删除前的写入的序号书名数量和换行符
}
}
if(find==0) //若没找到此书
{
printf('没有找到此书!请重新输入\ n’);
继续;
}
fclose(书);
fclose(第一册);
Book1=fopen('d:/Book1.txt ',' r ');
Book=fopen('d:/Book.txt ',' w ');//刷新原文件,再次写入正确数据
而(!feof(第一册))
{
fscanf(Book1,' %d %s %d\n ',readNumber,readName,readNum);
fprintf(Book,' %d %s %d\n ',readNumber,readName,read num);
}
fclose(书);
fclose(第一册);
删除(' d:/book1。txt’);//删除原文件
printf('删除成功!\ n’);
}
}
//展示全部图书的函数
void showBook(文件*书籍)
{
printf(' Library \ n ');
printf('[-]\ n ');
printf('\t序号\t书名\t\t数量\ n’);
char readName[20]={ 0 };
int readNum,readNum
Book=fopen('d:/Book.txt ',' r ');
而(!书)
{
fscanf(Book,' %d %s %d\n ',readNumber,readName,readNum);
printf('\t%d\t%s\t\t%d\n ',readNumber,readName,read num);
}
fclose(书);
printf('[-]\ n ');
}
//向管理员展示全部用户的函数
无效显示用户(文件*用户)
{
printf(' Users \ n ');
printf('[-]\ n ');
printf('\t序号\t姓名\t所借阅图书\ n’);
char readName[20]={0},借书[20]={ 0 };
int readNumber
Users=fopen('d:/Users.txt ',' r ');
而(!用户数)
{
fscanf(用户,' %d %s %s\n ',readNumber,readName,借书);
printf('\t%d\t%s\t%s\n ',readNumber,readName,借书);
}
fclose(用户);
printf('[-]\ n ');
}
//添加用户函数
void addUsers(文件*用户)
{
文件*用户1;//当文件和用户都存在时需要新建文件来更改信息
int judge name=0;//判断此用户是否已经存在
int num=1,readNumber//存放读到的书本数量读到的用户序号
char name[20]={0},readName[20]={0},borrowBook[20]={'None'},read borrow book[20]={ ' None ' };//存放用户名字暂时存放读到的字符串名
printf('请输入要添加的用户名:');
for(int I=0;i20i ) //从输入流取得需要添加的用户名
{
如果(i==0)
scanf('%c%c ',enter,name[I]);
其他
scanf('%c ',name[I]);
if(name[i]==10) //将最后的换行符改为空
{
name[I]=0;
打破;
}
}
if(access('d:/Users.txt ',F_OK)==0) //access函数判断文件是否存在,存在返回值为0 使用的头文件为超正析象管
{
法官姓名=1;
FILE *judge=fopen('d:/Users.txt ',' r ');//读取数据文件,查找是否已经存在此用户
而(!法官)
{
fscanf(judge,' %d %s %s ',readNumber,readName,readBorrowBook);//由于readName已经表示地址,不需要取地址符
fscanf(judge,' \ n ');//读入换行符,准备下一行的读取
if(strcmp(name,readName)==0) //发现已经存在此用户后跳出循环
{
printf('已经存在此用户,无法添加。');//已经存在此用户,返回
返回;
}
}
fclose(法官);//关闭用于判断而打开的文件
用户数=阅读数1;
if(judgeName==1)
Users=fopen('d:/Users.txt ',' a ');//文件存在且不存在相同用户时向后追加内容
}
其他
Users=fopen('d:/Users.txt ',' w ');//文件不存在时新建一个文件
fprintf(用户,' %d %s %s\n ',usersNumber,name,借书);//写入序号用户名所借书和换行符
用户数量
fclose(用户);
printf('添加成功!\ n’);
}
//修改读者信息函数
无效更改用户(文件*用户)
{
while(1)
{
char name[20]={0},readName[20]={0},borrow book[20]={ ' None ' };
printf('编辑读取器名称\ n’);
printf('[-]\ n ');
printf('\t请选择需要修改的信息:\n 1 .修改读者名称\n 2 .返回主菜单\ n’);
printf('[-]\ n ');
(同Internationalorganizations)国际组织函数,readNumber,find=0;//功能选择读取到的序号是否找到此书
Users=fopen('d:/Users.txt ',' r ');//只读打开原文件
//此处创建如果用户存在,一会用于查找是否存在相同的名字
int ifNumber
char ifName[20]={0},if borrow[20]={ 0 };
FILE *如果用户存在=fopen(' d:/book1。txt ',' w ');
而(!用户数)
{
fscanf(用户,' %d %s %s\n ',ifNumber,ifName,if borrow);
fprintf(ifUserExisted,' %d %s %s\n ',ifNumber,ifName,if borrow);
}
fclose(如果用户存在);
fclose(用户);
Users=fopen('d:/Users.txt ',' r ');//只读打开原文件
scanf('%d ',函数);
如果(函数==2)
{
删除(' d:/users 1。txt’);//有时会多余创造了文件,需要删除
返回;
}
FILE * users 1=fopen(' d:/users 1。txt ',' w ');//先新建一个文件存储更改后的信息
printf('请输入需要更改的用户名:');
for(int I=0;i20i ) //从输入流取得需要更改的读者名字
{
如果(i==0)
scanf('%c%c ',enter,name[I]);
其他
scanf('%c ',name[I]);
if(name[i]==10) //将最后的换行符改为空
{
name[I]=0;
打破;
}
}
如果(函数==1)
{
而(!用户数)
{
fscanf(用户,' %d %s %s\n ',readNumber,readName,借书);
if(strcmp(name,readName)==0)
{
find=1;//找到了此读者
printf('您要将读者名" %s "更改为:',名称);
字符更改名称[20]={ 0 };
for(int I=0;i20i ) //从输入流取得需要更改的用户名字
{
如果(i==0)
scanf('%c ',更改名称[I]);
其他
scanf('%c ',更改名称[I]);
if(changeName[i]==10) //将最后的换行符改为空
{
更改名称[I]=0;
打破;
}
}
如果用户存在=fopen(' d:/book1。txt ',' r ');//判断更改后的名字是否会和存在的用户名冲突
而(!feof(如果用户存在))
{
fscanf(ifUserExisted,' %d %s %s\n ',ifNumber,ifName,if borrow);
if (strcmp(changeName,ifName)==0)
{
printf('更改失败:已存在名称为%s的读者\n ',更改名称);
fclose(如果用户存在);
fclose(用户);//关闭文件
fclose(用户1);
返回;
}
}
fprintf(Users1,' %d %s %s\n ',readNumber,changeName,借书);//写入序号更改后的读者名所借书籍和换行符
}
其他
fprintf(Users1,' %d %s %s\n ',readNumber,readName,borrow book);//写入序号书名数量和换行符
}
if(find==0) //若没找到此读者
{
printf('没有找到此读者!请重新输入\ n’);
打破;
}
fclose(用户);//关闭文件
fclose(用户1);
Users1=fopen('d:/Users1.txt ',' r ');
Users=fopen('d:/Users.txt ',' w ');//刷新原文件,再次写入正确数据
而(!feof(用户1))
{
fscanf(Users1,' %d %s %s\n ',readNumber,readName,borrow book);
fprintf(用户,' %d %s %s\n ',readNumber,readName,借书);
}
fclose(用户);
fclose(用户1);
删除(' d:/users 1。txt’);//删除原文件
//重命名(' d:/Book1.txt ',' d:/Book。txt’);//将更改后的文件改名为原数据文件此方法成功率低!
printf('更改成功!\ n’);
}
其他
{
printf('输入格式有误,请重新输入!\ n’);
打破;
}
}
}
//删除用户的函数
无效消色器(文件*用户)
{
while(1)
{
printf('请输入您想删除的读者名:(输入-r返回上一级)');
char del name[20]={ 0 };
for(int I=0;i20i ) //从输入流取得需要删除的用户名字
{
//if(i==0)
//scanf('%c%c ',enter,del name[I]);
//否则
scanf('%c ',delName[I]);
if(delName[i]==10) //将最后的换行符改为空
{
del name[I]=0;
打破;
}
}
if(strcmp(delName,'-r')==0) //输入返回上一级的指示后返回
返回;
int readNumber,find=0;
char readName[20]={0},借书[20]={ ' None ' };
Users=fopen('d:/Users.txt ',' r ');
FILE * users 1=fopen(' d:/users 1。txt ',' w ');
而(!用户数)
{
fscanf(用户,' %d %s %s\n ',readNumber,readName,借书);
if(strcmp(delName,readName)==0)
{
find=1;//找到了此读者
//因为要删除此条信息,所以不再向新文件中输出它
}
其他
{
if(find==1)
fprintf(Users1,' %d %s %s\n ',readNumber-1,readName,借书);//排在删除后的写入-1的序号读者名所借书和换行符
其他
fprintf(Users1,' %d %s %s\n ',readNumber,readName,borrow book);//删除前的写入的序号读者名所借书和换行符
}
}
? if(find==0) ?//若没找到此读者 ? ? ? ? { ? ? ? ? ? ? printf("没有找到此读者!请重新输入\n"); ? ? ? ? ? ? continue; ? ? ? ? } ? ? ? ? fclose(Users1); ? ? ? ? fclose(Users); ? ? ? ? Users1 = fopen("d:/Users1.txt", "r"); ? ? ? ? Users = fopen("d:/Users.txt", "w+"); ? //刷新原文件,再次写入正确数据 ? ? ? ? while(!feof(Users1)) ? ? ? ? { ? ? ? ? ? ? fscanf(Users1, "%d %s %s\n", &readNumber, readName, borrowBook); ? ? ? ? ? ? fprintf(Users, "%d %s %s\n", readNumber, readName, borrowBook); ? ? ? ? } ? ? ? ? fclose(Users1); ? ? ? ? fclose(Users); ? ? ? ? remove("d:/Users1.txt"); ?//删除原文件 ? ? ? ? ? ? ? ? ? ? ? printf("删除成功!\n"); ? ? } } //借阅函数 void borrowBooking(char readerName[]) { ? ? printf("请输入您想借阅的图书名:"); ? ? char name[20] = {0}; ? ? for(int i = 0; i<20; i++) ?//从输入流取得图书名 ? ? { ? ? ? ? if(i==0) ? ? ? ? ? ? scanf("%c%c", &enter,&name[i]); ? ? ? ? else ? ? ? ? ? ? scanf("%c",&name[i]); ? ? ? ? if(name[i]==10) ?//将最后的换行符改为空 ? ? ? ? { ? ? ? ? ? ? name[i]=0; ? ? ? ? ? ? break; ? ? ? ? } ? ? } ? ? char readName[20] = {0}; ? ? int readNumber, readNum, find = 0; ? ? //更改被借阅的图书的信息 ? ? FILE *Book = fopen("d:/Book.txt", "r"); ? ? FILE *Book1 = fopen("d:/Book1.txt", "w"); ? ? while (!feof(Book)) ? ? { ? ? ? ? fscanf(Book, "%d %s %d\n", &readNumber, readName, &readNum); ? ? ? ? if(strcmp(name, readName)==0) ? ? ? ? { ? ? ? ? ? ? ? find = 1; ? ? ? ? ? ? if(readNum<1) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? printf("借阅失败:无剩余可借阅的%s!\n", readName); ? ? ? ? ? ? ? ? return; ? ? ? ? ? ? } ? ? ? ? ? ? fprintf(Book1, "%d %s %d\n", readNumber, readName, readNum-1); //若找到需要借阅的图书,则在此书数量上减1? ? ? ? ? }? ? ? ? ? else ? ? ? ? ? ? fprintf(Book1, "%d %s %d\n", readNumber, readName, readNum); ?//删除前的写入的序号 读者名 所借书和换行符? ? ? } ? ? if(find==0) ?//若没找到此书 ? ? { ? ? ? ? printf("借阅失败:没有找到此书!\n"); ? ? ? ? return; ? ? } ? ? fclose(Book); ? ? fclose(Book1); ? ? Book1 = fopen("d:/Book1.txt", "r"); ? ? Book = fopen("d:/Book.txt", "w+"); ? //刷新原文件,再次写入正确数据 ? ? while(!feof(Book1)) ? ? { ? ? ? ? fscanf(Book1, "%d %s %d\n", &readNumber, readName, &readNum); ? ? ? ? fprintf(Book, "%d %s %d\n", readNumber, readName, readNum); ? ? } ? ? fclose(Book1); ? ? fclose(Book); ? ? remove("d:/Book1.txt"); ?//删除原文件? ? ? //更改读者的信息 ? ? FILE *Users = fopen("d:/Users.txt", "r"); ? ? FILE *Users1 = fopen("d:/Users1.txt", "w"); ? ? char borrowBook[20] = {"None"}; ? ? while (!feof(Users)) ? ? { ? ? ? ? fscanf(Users, "%d %s %s\n", &readNumber, readName, borrowBook); ? ? ? ? if(strcmp(readerName, readName)==0) ? ? ? ? ? ? fprintf(Users1, "%d %s %s\n", readNumber, readName, name); //在读者的借阅图书上写上所借阅的图书名? ? ? ? ? else ? ? ? ? ? ? fprintf(Users1, "%d %s %s\n", readNumber, readName, borrowBook);? ? ? } ? ? fclose(Users1); ? ? fclose(Users); ? ? Users1 = fopen("d:/Users1.txt", "r"); ? ? Users = fopen("d:/Users.txt", "w+"); ? //刷新原文件,再次写入正确数据 ? ? while(!feof(Users1)) ? ? { ? ? ? ? fscanf(Users1, "%d %s %s\n", &readNumber, readName, borrowBook); ? ? ? ? fprintf(Users, "%d %s %s\n", readNumber, readName, borrowBook); ? ? } ? ? fclose(Users1); ? ? fclose(Users); ? ? remove("d:/Users1.txt"); ?//删除原文件 ?有时候还是删不掉 ? ? printf("借阅成功!\n");? } //还书函数 void returnBooking(char readerName[], char borrowBook[]) { ? ? char readName[20] = {0}; ? ? int readNumber, readNum, find = 0; ? ? //更改被还回的图书的信息 ? ? FILE *Book = fopen("d:/Book.txt", "r"); ? ? FILE *Book1 = fopen("d:/Book1.txt", "w"); ? ? while (!feof(Book)) ? ? { ? ? ? ? fscanf(Book, "%d %s %d\n", &readNumber, readName, &readNum); ? ? ? ? if(strcmp(borrowBook, readName)==0) ? ? ? ? { ? ? ? ? ? ? fprintf(Book1, "%d %s %d\n", readNumber, readName, readNum+1); //若找到被还的图书,则在此书数量上加1 ? ? ? ? ? ? ? find = 1; ? ? ? ? } ? ? ? ? else ? ? ? ? ? ? fprintf(Book1, "%d %s %d\n", readNumber, readName, readNum); //不是还回的书? ? ? } ? ? fclose(Book); ? ? fclose(Book1); ? ? Book1 = fopen("d:/Book1.txt", "r"); ? ? Book = fopen("d:/Book.txt", "w+"); ? //刷新原文件,再次写入正确数据 ? ? while(!feof(Book1)) ? ? { ? ? ? ? fscanf(Book1, "%d %s %d\n", &readNumber, readName, &readNum); ? ? ? ? fprintf(Book, "%d %s %d\n", readNumber, readName, readNum); ? ? } ? ? bookNumber = readNumber+1; ? ? fclose(Book1); ? ? fclose(Book); ? ? remove("d:/Book1.txt"); ?//删除原文件 ? ? if(find==0) ?//还书时没有书城中没有此书,直接添加一本 ? ? { ? ? ? ? FILE *Book; ? ? ? ? Book = fopen("d:/Book.txt", "a"); ? ? ? ? ? fprintf(Book, "%d %s 1\n", bookNumber, borrowBook); ?//写入序号 书名 数量和换行符 ? ? ? ? bookNumber++;? ? ? ? ? fclose(Book); ? ? } ? ? //更改读者的信息 ? ? FILE *Users = fopen("d:/Users.txt", "r"); ? ? FILE *Users1 = fopen("d:/Users1.txt", "w"); ? ? char rborrowBook[20] = {"None"}; ? ? while (!feof(Users)) ? ? { ? ? ? ? fscanf(Users, "%d %s %s\n", &readNumber, readName, rborrowBook); ? ? ? ? if(strcmp(readerName, readName)==0) ? ? ? ? ? ? fprintf(Users1, "%d %s %s\n", readNumber, readName, "None"); //还回书后所借阅图书变为"None"? ? ? ? ? else ? ? ? ? ? ? fprintf(Users1, "%d %s %s\n", readNumber, readName, rborrowBook);? ? ? } ? ? fclose(Users1); ? ? fclose(Users); ? ? Users1 = fopen("d:/Users1.txt", "r"); ? ? Users = fopen("d:/Users.txt", "w+"); ? //刷新原文件,再次写入正确数据 ? ? while(!feof(Users1)) ? ? { ? ? ? ? fscanf(Users1, "%d %s %s\n", &readNumber, readName, rborrowBook); ? ? ? ? fprintf(Users, "%d %s %s\n", readNumber, readName, rborrowBook); ? ? } ? ? fclose(Users1); ? ? fclose(Users); ? ? remove("d:/Users1.txt"); ?//删除原文件 ?有时候还是删不掉 ? ? printf("成功还回%s\n", borrowBook); } //单独查询功能,根据编号或书名查询书被哪些人借走 void searchBook() { ? ? while (1) ? ? { ? ? ? ? int function = 0; ? ? ? ? FILE *Book = fopen("d:/Book.txt", "r"); ? ? ? ? FILE *Users = fopen("d:/Users.txt", "r"); ? ? ? ? char readerName[20] = {0}, bookName[20] = {0}, borrowBook[20] = {0}, name[20] = {0}; ? ? ? ? int bookNumber, bookNum, find = 0, readerNumber; ? ? ? ? printf(" ? ? ? ? ? ? ? ? ? Search ? ? ? ? ? ? ? ? ? \n"); ? ? ? ? printf("[------------------------------------------]\n"); ? ? ? ? printf("\t\t请选择查询功能:\n\t1.根据编号查询\n\t2.根据书名查询\n\t3.返回主界面\n"); ? ? ? ? printf("[------------------------------------------]\n"); ? ? ? ? scanf("%d",&function); // 输入需要的功能 ? ? ? ? switch (function) ? ? ? ? { ? ? ? ? ? ? case 1: ? ? ? ? ? ? ? ? printf("您要查找的书序号是:"); ? ? ? ? ? ? ? ? scanf("%d",&function); // 输入需要查找的图书编号 ? ? ? ? ? ? ? ? while(!feof(Book)) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? fscanf(Book, "%d %s %d\n", &bookNumber, bookName, &bookNum); //由于bookName已经表示地址,不需要取地址符 ? ? ? ? ? ? ? ? ? ? if(bookNumber==function) ?//发现查找的书后跳出循环 ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? find = 1;//找到书 ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? if(find==0) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? printf("没有找到编号为%d的图书。\n",function); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? printf(" ? ? ? ? ? ? ? Search Result ? ? ? ? ? ? ? ?\n"); ? ? ? ? ? ? ? ? printf("[------------------------------------------]\n"); ? ? ? ? ? ? ? ? find = 0;//需要在查找谁借阅时再次使用 ? ? ? ? ? ? ? ? printf("\t编号:\t\t%d\n\t书名:\t\t%s\n\t剩余数量:\t%d\n\t",bookNumber, bookName, bookNum); ? ? ? ? ? ? ? ? while (!feof(Users)) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? fscanf(Users, "%d %s %s\n", &readerNumber, readerName, borrowBook);//遍历读者查找谁借阅了这本书 ?? ? ? ? ? ? ? ? ? ? ? if (strcmp(borrowBook, bookName)==0) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? if(find==0) ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? find = 1; ? ? ? ? ? ? ? ? ? ? ? ? ? ? printf("借阅此书的读者:"); ? ? ? ? ? ? ? ? ? ? ? ? ? ? printf("%s",readerName); ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? printf(" ,%s",readerName); ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? if(find==0) ? ? ? ? ? ? ? ? ? ? printf("还没有读者借阅此书。\n"); ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? printf("\n"); ? ? ? ? ? ? ? ? printf("[------------------------------------------]\n"); ? ? ? ? ? ? ? ? printf("输入回车返回...\n"); ? ? ? ? ? ? ? ? enter = getchar(); ? ? ? ? ? ? ? ? enter = getchar(); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case 2: ? ? ? ? ? ? ? ? printf("您要查找的书名是:"); ? ? ? ? ? ? ? ? scanf("%s",name); // 输入需要查找的图书名 ? ? ? ? ? ? ? ? while(!feof(Book)) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? fscanf(Book, "%d %s %d\n", &bookNumber, bookName, &bookNum); //由于bookName已经表示地址,不需要取地址符 ? ? ? ? ? ? ? ? ? ? if(strcmp(bookName, name)==0) ?//发现查找的书后跳出循环 ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? find = 1;//找到书 ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? if(find==0) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? printf("没有找到名称为%s的图书。\n",name); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? printf(" ? ? ? ? ? ? ? Search Result ? ? ? ? ? ? ? ?\n"); ? ? ? ? ? ? ? ? printf("[------------------------------------------]\n"); ? ? ? ? ? ? ? ? find = 0;//需要在查找谁借阅时再次使用 ? ? ? ? ? ? ? ? printf("\t编号:\t\t%d\n\t书名:\t\t%s\n\t剩余数量:\t%d\n\t",bookNumber, bookName, bookNum); ? ? ? ? ? ? ? ? while (!feof(Users)) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? fscanf(Users, "%d %s %s\n", &readerNumber, readerName, borrowBook);//遍历读者查找谁借阅了这本书 ?? ? ? ? ? ? ? ? ? ? ? if (strcmp(borrowBook, bookName)==0) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? if(find==0) ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? find = 1; ? ? ? ? ? ? ? ? ? ? ? ? ? ? printf("借阅此书的读者:"); ? ? ? ? ? ? ? ? ? ? ? ? ? ? printf("%s",readerName); ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? printf(" ,%s",readerName); ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? if(find==0) ? ? ? ? ? ? ? ? ? ? printf("还没有读者借阅此书。\n"); ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? printf("\n"); ? ? ? ? ? ? ? ? printf("[------------------------------------------]\n"); ? ? ? ? ? ? ? ? printf("输入回车返回...\n"); ? ? ? ? ? ? ? ? enter = getchar(); ? ? ? ? ? ? ? ? enter = getchar(); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case 3: ? ? ? ? ? ? ? ? return; ? ? ? ? ? ? default: ? ? ? ? ? ? ? ? printf("您输入的格式有误,请重新输入\n"); ? ? ? ? ? ? ? ? break; ? ? ? ? } ? ? ? ? fclose(Book); ? ? ? ? fclose(Users); ? ? } } int main(int argc, char *argv[]) ?//需要从命令行读入参数 { ? ? char identity1[] = "-u"; ?//读者身份 ? ? char identity2[] = "-a"; ?//管理员身份 ? ? FILE *Book, *Users; ?//两个文件分别存储图书信息和读者信息。 ?? ?int function1, function2; //功能选项 ? ? /*调试用 ? ? char readerName[20] = {0}; ? ? int test = 0; ? ? scanf("%d %s",&test, readerName); ? ? if(test==1) ? ? */ ? ? if(strcmp(argv[1], identity2)==0) ?//管理员操作界面 ? ? { ? ? ? ? char Administrator[20] = "Zhang"; ? ? ? ? if(strcmp(Administrator, argv[2])==0) ? ? ? ? { ? ? ? ? ? ? ? ? while(1) ? ? ? ? ? ? { ?? ? ? ? ? ? ? ? ? printf(" ? ? ? ? ? ? ? ? ? ?menu ? ? ? ? ? ? ? ? ? ?\n"); ? ? ? ? ? ? ? ? printf("[------------------------------------------]\n"); ? ? ? ? ? ? ? ? printf(" ? ? 管理员您好!请选择您要使用的功能:\n ?1.新增或修改图书信息\n ?2.新增或修改读者信息\n ?3.查看全部馆藏书籍\n ?4.查看全部读者及其借阅信息\n ?5.图书详情查询\n ?6.结束程序\n"); ? ? ? ? ? ? ? ? printf("[------------------------------------------]\n"); ? ? ? ? ? ? ? ? scanf("%d",&function1); ? ? ? ? ? ? ? ? ? switch (function1) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? case 1: ?//更改图书信息 ? ? ? ? ? ? ? ? ? ? ? ? printf(" ? ? ? ? ? ? ? ? ?Books ? ? ? ? ? ? ? ? ? ? \n"); ? ? ? ? ? ? ? ? ? ? ? ? printf("[------------------------------------------]\n"); ? ? ? ? ? ? ? ? ? ? ? ? printf("\t请选择要对图书进行的操作:\n ?1.添加图书信息\n ?2.修改图书信息\n ?3.删除图书信息\n ?4.返回主菜单\n"); ? ? ? ? ? ? ? ? ? ? ? ? printf("[------------------------------------------]\n"); ? ? ? ? ? ? ? ? ? ? ? ? scanf("%d",&function2); ?//输入第二级操作指令 ? ? ? ? ? ? ? ? ? ? ? ? switch (function2) ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? case 1: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? addBook(Book); ?//调用添加图书函数 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? ? ? ? ? case 2: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? changeBook(Book); ?//修改函数 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? ? ? ? ? case 3: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? scanf("%c",&enter); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? delBook(Book); ?//删除函数 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? ? ? ? ? case 4: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? ? ? ? ? default: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? printf("输入的值令有误,请重新输入"); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? case 2: ?//更改读者信息 ? ? ? ? ? ? ? ? ? ? ? ? printf(" ? ? ? ? ? ? ? ? ?Readers ? ? ? ? ? ? ? ? ? \n"); ? ? ? ? ? ? ? ? ? ? ? ? printf("[------------------------------------------]\n"); ? ? ? ? ? ? ? ? ? ? ? ? printf("\t请选择要对用户进行的操作:\n ?1.添加用户信息\n ?2.修改用户信息\n ?3.删除用户信息\n"); ? ? ? ? ? ? ? ? ? ? ? ? printf("[------------------------------------------]\n"); ? ? ? ? ? ? ? ? ? ? ? ? scanf("%d",&function2); ?//输入第二级操作指令 ? ? ? ? ? ? ? ? ? ? ? ? switch (function2) ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? case 1: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? addUsers(Users); ?//添加用户信息 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? ? ? ? ? case 2: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? changeUsers(Users); ?//修改用户信息 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? ? ? ? ? case 3: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? scanf("%c",&enter); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? delUsers(Users); ?//删除用户信息 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? ? ? ? ? default: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? printf("输入的值令有误,请重新输入"); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? case 3: ? ? ? ? ? ? ? ? ? ? ? ? showBook(Book); ? ? ? ? ? ? ? ? ? ? ? ? printf("输入回车返回...\n"); ? ? ? ? ? ? ? ? ? ? ? ? enter = getchar(); ? ? ? ? ? ? ? ? ? ? ? ? enter = getchar(); ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? case 4: ? ? ? ? ? ? ? ? ? ? ? ? showUsers(Users); ? ? ? ? ? ? ? ? ? ? ? ? printf("输入回车返回...\n"); ? ? ? ? ? ? ? ? ? ? ? ? enter = getchar(); ? ? ? ? ? ? ? ? ? ? ? ? enter = getchar(); ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? case 5: ? ? ? ? ? ? ? ? ? ? ? ? searchBook(); ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? case 6: ? ? ? ? ? ? ? ? ? ? ? ? printf("感谢您的使用,再见!"); ? ? ? ? ? ? ? ? ? ? ? ? return 0; ? ? ? ? ? ? ? ? ? ? default: ? ? ? ? ? ? ? ? ? ? ? ? printf("输入格式有误,请重新输入!"); ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? else ? ? ? ? ? ? printf("管理员名有误,请重新输入!"); ? ? } ? ? /* ? ? else if(test == 2) ? ? */ ? ? ? ? ? ? ? ? ? ? ?? ? ? else if (strcmp(argv[1], identity1)==0) ?//读者的操作界面 ? ? { ? ? ? ? char readName[20] = {0}, borrowBook[20] = {"None"}; ? ? ? ? int readNumber,find = 0; ? ? ? ? FILE *Users = fopen("d:/Users.txt","r"); ?//需要判断是否存在此用户 ? ? ? ? while (!feof(Users)) ? ? ? ? { ? ? ? ? ? ? fscanf(Users, "%d %s %s\n", &readNumber, readName, borrowBook); ? ? ? ? ? ? if(strcmp(argv[2], readName)==0) ? ? ? ? ? ? { ?? ? ? ? ? ? ? ? ? find = 1; ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? fclose(Users); ? ? ? ? if(find==0) ? ? ? ? { ? ? ? ? ? ? printf("不存在用户名为%s的读者!", argv[2]); ? ? ? ? ? ? return 0; ? ? ? ? } ? ? ? ? while (1) ? ? ? ? { ? ? ? ? ? ? FILE *Users = fopen("d:/Users.txt","r"); ?//刷新用户的借阅信息 ? ? ? ? ? ? while (!feof(Users)) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? fscanf(Users, "%d %s %s\n", &readNumber, readName, borrowBook); ? ? ? ? ? ? ? ? if(strcmp(argv[2], readName)==0) ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? } ? ? ? ? ? ? fclose(Users); ? ? ? ? ? ? printf(" ? ? ? ? ? ? ? ? ? ?menu ? ? ? ? ? ? ? ? ? ?\n"); ? ? ? ? ? ? printf("[------------------------------------------]\n"); ? ? ? ? ? ? printf("\t读者%s您好!请选择您要使用的功能:\n ?1.借阅图书\n ?2.还回图书\n ?3.查看全部馆藏书籍\n ?4.结束程序\n", argv[2]); ? ? ? ? ? ? printf("[------------------------------------------]\n"); ? ? ? ? ? ? scanf("%d",&function1); ? ? ? ? ? ? ? switch (function1) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? case 1: ?//借阅图书 ? ? ? ? ? ? ? ? ? ? if(strcmp(borrowBook, "None")==0) ? ? ? ? ? ? ? ? ? ? ? ? borrowBooking(argv[2]); ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? printf("您已经借阅图书,请先还书再进行借阅操作。\n"); ? ? ? ? ? ? ? ? ? ? printf("输入回车返回...\n"); ? ? ? ? ? ? ? ? ? ? enter = getchar(); ? ? ? ? ? ? ? ? ? ? enter = getchar(); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? case 2: ?//还书 ? ? ? ? ? ? ? ? ? ? if(strcmp(borrowBook, "None")!=0) ? ? ? ? ? ? ? ? ? ? ? ? returnBooking(argv[2], borrowBook); ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? printf("您当前还没有借阅图书。\n"); ? ? ? ? ? ? ? ? ? ? printf("输入回车返回...\n"); ? ? ? ? ? ? ? ? ? ? enter = getchar(); ? ? ? ? ? ? ? ? ? ? enter = getchar(); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? case 3: ? ? ? ? ? ? ? ? ? ? showBook(Book); ? ? ? ? ? ? ? ? ? ? printf("输入回车返回...\n"); ? ? ? ? ? ? ? ? ? ? enter = getchar(); ? ? ? ? ? ? ? ? ? ? enter = getchar(); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? case 4: ? ? ? ? ? ? ? ? ? ? printf("感谢您的使用,再见!"); ? ? ? ? ? ? ? ? ? ? return 0; ? ? ? ? ? ? ? ? default: ? ? ? ? ? ? ? ? ? ? printf("输入格式有误,请重新输入!"); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? } ? ? ? ? } ? ? } ? ? else ? ? ? ? printf("您输入的格式有误,请重新输入!"); ? ? return 0; }以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。