📄 个人图书管理系统.cpp
字号:
#include"stdio.h"
#include"stdlib.h"
#include"windows.h"
#include"string.h"
/*图书相关信息*/
struct bookinf //定义图书相关信息结构体
{
int num;
char bname[20];
char wname[10];
char clanum[14];
char pubcom[10];
char pubtime[10];
float price;
};
/*首页*/
void index() //首页打印设置
{ void adm_servelist();
char input;
printf("\n\n\t\t\t*****************************\n");
printf("\t\t\t PERSONNAL个人图书管理系统\n");
printf("\t\t\t*****************************\n\n\n");
printf(" ------------------------------------------------------------------------------\n");
printf("\t<按任意键进入>\n\t");
input=getchar(); //让用户输入一个字符后再进行下一步(以后在本程序中用得很多)
system("cls"); //清屏
adm_servelist();
}
/*关于界面*/
void about()
{
void adm_servelist();
char input; //关于界面的打印设置
system("cls");
printf("\n\n\t\t0610003028-赵成伟 个人图书管理系统作业\n");
printf("\n\n\t\t\t\t欢迎使用帮助\n");
printf("本系统功能强大\n\n");
printf("\t 实现了:\n");
printf("\t\t1 图书信息录入\n");
printf("\t\t2 图书信息查询\n");
printf("\t\t3 图书信息修改\n");
printf("\t\t4 图书信息删除\n");
printf("\t\t5 图书信息排序\n");
printf("\n\t按任意键返回登陆界面!");
input=getchar();
input=getchar();
adm_servelist(); //任意键返回登陆界面
}
/*离开界面*/
void byebye() //离开界面
{
char input;
system("cls");
printf("\n\n\t________________________________________________________________");
printf("\n\n\n\t\t*感谢您的使用*\n\n\t\t");
printf("按任意键退出本系统\n\t\t");
input=getchar();
input=getchar();
printf("\n\t\t");
exit(0); //exit()函数跳出整个程序
}
/*删除所有相关信息*/
void delall() //管理员选项中的初始化函数
{
//void adm_servelist();
void adm_servelist();
int inp;
char input;
do //如果输入的不是界面提供的选项值,则重复显示输入界面
{
system("cls");
printf("\n\n\t----------!!警告!!----------\n");
printf("\n\t一旦选择了全部初始化将清除全部数据!\n");
printf("\n\t初始化完毕后返回登陆界面\n");
printf("\n\n\t你确定要初始化吗: 1: Yes 2: No ");
printf("\n\t请输入服务选项:");
scanf("%d",&inp);
switch (inp)
{
case 1: //如果输入为1则删除book.dat文件
remove("book.dat");
printf("\n\n\t初始化完毕!\n\t所有数据全部清空!\n\t按任意键返回登陆界面!");
input=getchar();
input=getchar();
adm_servelist(); //并返回登陆界面
break;
case 2: //选2则返回管理员登陆界面
adm_servelist();
break;
default: //否则打印如下字样并重复循环
printf("\n\n\t对不起~没有这项服务!\n\t按任意键重新选择\n\t");
input=getchar();
input=getchar();
break;
}
}
while (inp!=1&&inp!=2);
}
/*管理员服务选项*/
void adm_servelist()
{
void book_add();
void book_view();
void taxis();
void book_search();
void pwchange();
void delall();
int in;
char input;
do //和以前一样用do{}while; 语句来保证用户的输入信息能够被系统接受
{
system("cls");
printf("\n\n\n\t--欢迎使用PERSONNAL图书管理系统--");
printf("\n\n\t1.新增图书\n");
printf("\t2.图书信息浏览\n");
printf("\t3.查询指定图书\n");
printf("\t4.图书按编号排序\n");
printf("\t5.图书信息初始化\n");
printf("\t6.关于本系统\n");
printf("\t7.退出系统\n");
printf("\n\t请选择服务种类:");
scanf("%d",&in);
if (in!=1&&in!=2&&in!=3&&in!=4&&in!=5&&in!=6&&in!=7)
{
printf("\n\t没有这项服务~\n");
printf("\t按任意键重新选择");
input=getchar();
input=getchar();
}
}
while (in!=1&&in!=2&&in!=3&&in!=4&&in!=5&&in!=6&&in!=7);
switch (in)
{
case 1: book_add(); break; //选择不同服务的时候进行不同的函数块
case 2: book_view(); break;
case 3: book_search(); break;
case 4: taxis(); break;
case 5: delall(); break;
case 6: about(); break;
case 7: exit(0); break;
}
}
/*新增图书*/
void book_add()
{
void adm_servelist();
void book_add();
int i=0,j;
int inp;
FILE *fp;
char input;
struct bookinf books;
struct bookinf book_taxis[100];
system("cls"); //输入图书信息
printf("\n\n\n\t---请输入图书信息---\n\n");
printf("\t图书编号:");
scanf("%d",&books.num);
printf("\n\t书名:");
scanf("%s",books.bname);
printf("\n\t作者名:");
scanf("%s",books.wname);
printf("\n\t分类号:");
scanf("%s",books.clanum);
printf("\n\t出版单位:");
scanf("%s",books.pubcom);
printf("\n\t出版时间:");
scanf("%s",books.pubtime);
printf("\n\t价格:");
scanf("%f",&books.price);
if ((fp=fopen("book.dat","rb"))!=NULL) //对输入的图书信息中的编号进行判断
{
do
{
fread(&book_taxis[i],sizeof(struct bookinf),1,fp);
i=i+1;
}
while(!feof(fp));
fclose(fp);
for (j=0;j<=i;j++)
if (books.num==book_taxis[j].num) //如果新输入的图书编号已经使用过了
{ //显示以下信息并跳出本函数
system("cls");
printf("\n\n\n\t对不起,这个编号已经使用过了~\n");
printf("\t按任意键返回管理菜单~");
input=getchar();
input=getchar();
adm_servelist();
break;
}
}
if ((fp=fopen("book.dat","rb"))==NULL) //如果没有使用过该编号则进行写入操作
{
fp=fopen("book.dat","wb"); //创建写入文件流
}
else
{
fclose(fp);
fp=fopen("book.dat","ab");
}
fwrite(&books,sizeof(struct bookinf),1,fp); //写入信息
fclose(fp);
printf("\n\n\n\t信息输入完毕~按任意键继续\n");
input=getchar();
input=getchar();
do //要求用户选择是否继续输入新的信息
{
system("cls");
printf("\n\n\n\t1.继续输入\n");
printf("\t2.返回管理菜单\n");
printf("\n\t请选择服务类别:");
scanf("%d",&inp);
if (inp!=1&&inp!=2)
{
printf("\n\t没有这项服务~\n");
printf("\t按任意键重新选择");
input=getchar();
input=getchar();
}
}
while (inp!=1&&inp!=2);
switch(inp)
{
case 1: book_add(); break; //选是的话则重复执行本函数
case 2: adm_servelist(); break;
}
}
/*对图书信息排序*/
void taxis()
{
void adm_servelist();
system("cls");
int i=0,m,n;
FILE *fp;
char input;
void adm_servelist();
struct bookinf book_taxis[100],temp;
if ((fp=fopen("book.dat","rb"))==NULL) //判断图书信息文件是否存在
{
printf("\n\n\n\t没有数据可读取!无法排序~\n");
printf("\t按任意键回到管理菜单~");
input=getchar();
input=getchar();
adm_servelist();
}
else //存在即读取所有的信息存入结构体
{
rewind(fp);
do
{
fread(&book_taxis[i],sizeof(struct bookinf),1,fp);
i=i+1;
}
while(!feof(fp));
fclose(fp);
}
for (m=0;m<i-1-1;m++) //起泡法排序
for (n=0;n<i-1-1-m;n++)
if (book_taxis[n].num>book_taxis[n+1].num)
{
temp=book_taxis[n];
book_taxis[n]=book_taxis[n+1];
book_taxis[n+1]=temp;
}
if ((fp=fopen("book.dat","wb"))==NULL) //判断写入是否能成功
{
printf("\n\n\n\t数据读取失败!请联系管理员~\n");
printf("\t按任意键退出本系统~\n\t");
input=getchar();
input=getchar();
exit(0);
}
else //成功的话立刻写入排好顺序的信息
{
for (m=0;m<i-1;m++)
fwrite(&book_taxis[m],sizeof(struct bookinf),1,fp);
fclose(fp);
}
printf("\n\n\n\t排序完成!~\n\t按任意键返回管理选项菜单~\n\t");
input=getchar();
input=getchar();
adm_servelist();
}
/*图书浏览*/
void book_view()
{
void adm_servelist();
void book_view();
int inp,i=0,n=0;
FILE *fp;
char input;
struct bookinf bookview[100];
if ((fp=fopen("book.dat","rb"))==NULL) //判断图书信息文件是否存在
{
system("cls");
printf("\n\n\n\t数据尚未初始化~~\n\n\t请在管理菜单中增加图书信息~~~\n");
printf("\n\t<按任意键返回管理菜单>\n\t");
input=getchar();
input=getchar();
adm_servelist();
}
else //存在即读取所有信息存入结构体
{
do
{
fread(&bookview[i],sizeof(struct bookinf),1,fp);
i=i+1;
}
while (!feof(fp));
fclose(fp);
do //显示第一条记录
{
system("cls");
printf("\n\t--------共有%d条记录--------",i-1);
printf("\n\n\t编号: %d\n",bookview[n].num);
printf("\n\t书名: %s\n",bookview[n].bname);
printf("\n\t作者名: %s\n",bookview[n].wname);
printf("\n\t分类号: %s\n",bookview[n].clanum);
printf("\n\t出版单位: %s\n",bookview[n].pubcom);
printf("\n\t出版时间: %s\n",bookview[n].pubtime);
printf("\n\t价格: %f\n",bookview[n].price);
printf("\n\n\t1.上一页\t2.下一页\t3.回目录\n");
printf("\n\t请选择:");
scanf("%d",&inp);
switch (inp)
{
case 1: //对结构体数组的下标进行操作已达到翻页的效果
{
if (n==0)
{
printf("\n\t已到达首页\n\t按任意键重新选择");
input=getchar();
input=getchar();
}
else
{
n=n-1;
}
break;
}
case 2:
{
if (n==i-2)
{
printf("\n\t已到达最末页\n\t按任意键重新选择");
input=getchar();
input=getchar();
}
else
{
n=n+1;
}
break;
}
case 3:
{
adm_servelist();
break;
}
default:
{
printf("\n\t没有这项服务\n\t按任意键重新选择");
input=getchar();
input=getchar();
}
}
}
while (inp!=3);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -