大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
一、目的
通过设计一个图书管理系统的程序,全面运用课程的主要知识点,巩固对模块化程序设计、文件操作的理解,提高软件编程能力。
二、涉及的知识点
循环、分支语句、函数、数组、函数、结构体、指针、链表、文件读取操作等等
三、程序已经实现的功能点(用100-200字进行说明)
(1)程序具有以下功能,操作流程见下图:
登录界面:
输入用户名(admin)、密码(20190611),只有用户名、密码同时正确(信息存放在文件中)才能进入系统主菜单,否则需要重新输入用户名、密码。(同时输入3次错误将退出程序)。
操作功能:分为7个功能:输入1进行图书入库,输入2进行修改信息,输入3进行删除信息,输入4进行图书查询,输入5进行图书总览,输入6进行退出软件,输入7进行修改密码;
修改信息:输入对应的书名与编号,然后进行相应的修改。
删除信息:输入对应的编号,然后在确认删不删除。如果输入对应的编号不对,则可重新检索和返回主菜单,之后可返回主菜单;
图书查询:输入1进行书名查询,输入2进行作者查询,输入3进行登录号查询,输入4进行出版社查询,输入5进行模糊查询,查询信息与已有信息符合进入图书总览。输入0返回主菜单;
图书总览:可查看已录入的全部书籍信息;
退出软件:退出图书管理信息系统;
修改密码:先输入旧密码,旧密码正确再连续输入两次新密码(两次输入结果完全相同)后,新密码取代旧密码,并存放到帐户信息文件中,之后跳到登陆界面重新登陆。如果旧密码不对则可返回主菜单;
(2)定义如下结构体类型:
“用户名”结构体user:成员有:账号,密码;
“图书信息”结构体BOOK:成员有:number(登录号)、name(书名)、author(作者名)、type(类型)、publish(出版单位)、time(出版时间)、price(价格)、num(数量);
(3)帐户信息存放在name.txt文件,图书信息记录保存在mybook中;
(4)采用模块化程序设计方法来实现,即main()显示主菜单、调用相关函数实现相应功能,起主控作用。
(5)附加功能:
用户连续输错密码的次数超过3次,将退出程序;
四、程序运行截图及说明(要求对每幅图做简要说明,每图限50到100字)
登录界面:
输入用户名(admin)、密码(20190611),只有用户名、密码同时正确(信息存放在文件中)才能进入系统主菜单,否则需要重新输入用户名、密码。(同时输入3次错误将退出程序)。如图所示:
操作功能:分为7个功能:输入1进行图书入库,输入2进行修改信息,输入3进行删除信息,输入4进行图书查询,输入5进行图书总览,输入6进行退出软件,输入7进行修改密码,如下图所示:
图书入库:把图书的信息录入一个二进制的文件种。保存成功返回主菜单;按任意键返回主菜单;如下图所示:
修改信息:输入对应的书名与编号,然后图书入库功能进行相应的修改。如下图所示:
删除信息:输入对应的编号,然后在确认删不删除。如果输入对应的编号不对,则可重新检索和返回主菜单,之后可返回主菜单;如下图所示:
图书查询:输入1进行书名查询,输入2进行作者查询,输入3进行登录号查询,输入4进行出版社查询,输入5进行模糊查询,查询信息与已有信息符合进入图书总览。输入0返回主菜单;如下图所示:
图书总览:可查看已录入的全部书籍信息;如下图所示:
退出软件:退出图书管理信息系统。如下图所示:
修改密码:先输入旧密码,旧密码正确再连续输入两次新密码(两次输入结果完全相同)后,新密码取代旧密码,并存放到帐户信息文件中,之后跳到登陆界面重新登陆。如果旧密码不对则可返回主菜单;如下图所示:
五、设计心得(不能少于200字)
本次课程设计,除去各种闲杂时间,大约在设计上花费10个小时,编程上花费20小时,在输入和调试上花费35小时,其中大概有30多个小时是在思考问题。
这次在调试地过程中,也遇到了很多难题,比如编译不通过,在检查过程中也没有逻辑错误,百思不得其解后,我将出问题的那部分代码放到了新的源代码中来单独测试,通过调试后,从而发现问题并改正。编译通过,程序运行时发生警告,百思不得其解后,我也将出问题的那部分代码放到了新的源代码中来单独测试,通过调试后,发现问题大概出在fscanf语句和fprintf语句上,最后通过查询资料发现,原来在读写文件时,fscanf语句和fprintf语句,在输出和输入表列不用加&符号。这个问题也得到了解决。
另外还遇到了很多问题,都是采用类似调试——锁定目标——查阅资料——解决的步骤去完成的。
对于我的程序,我觉得功能还比较完善。但是还有很多可以添加的地方,比如添加一个借书榜单,逾期不还进行登记等等,代码方面还能可以简化一些,多设计一些更加通用的函数,比如建立链表函数,删除数据函数等等。有了这次设计的经验,我相信下次我能做到更好。
收获:
通过这次的课程设计我明白了完成一个好的程序,
首先要有明确的需求分析,只有这样才更好地完善程序;
第二,需要构建一个清晰合理的框架结构,来让各功能之间有条不紊地运行;
第三,针对每一个功能,我们要设计准确,简便,人性化的算法及操作逻辑,使各个功能能够给用户带来更好的体验;
第四,编写代码时要思路清晰,文本清楚,多记备注,画流程图,编写文档,这样能够使自己的思路更加清晰,从而更加有效地避免错误。
第五,调试过程是整个程序实现最重要的步骤之一,在调试中遇到问题无法解决,应当对着自己的代码,在脑子里执行,逐个排除直至锁定目标,另外编译器上的调试功能也是十分的使用,你可以逐条语句执行和某个值的变化来快速地找到问题的症结。
另外我对于C语言的知识也掌握得更加深入和牢固了,对于链表,指针,文件的知识也更加得心应手了。在此后我愿意更多地尝试实际地去完成一个程序来让自己的知识得到更好的巩固。
代码:
/*
课程设计项目名称:图书管理信息系统
作者:青春
时间:2019.6.10
*/
#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<conio.h>
#include<stdlib.h>
#include<malloc.h>
#include <time.h>
#define N sizeof(struct BOOK)
char c;//输入任意键
struct BOOK //图书信息
{
char number[10]; //登录号
char name[10]; //书名
char author[10]; //作者名
char type[10]; //类型
char publish[10]; //出版单位
char time[8]; //出版时间
float price; //价格
int num; //数量
int x;
struct BOOK *next; //指针域
};
typedef struct BOOK Book;
typedef Book *book;
void gaimi(); //修改密码
void login(); //登录界面
void HideCursor(); //隐藏光标
void toxy(int x, int y); //将光标移动到X,Y坐标处
void over(); //退出
void menu(); //菜单
void input_book(); //图书入库
void save_book(book p);//将图书信息存入文件
void find_book(); //图书查询
void print_book(); //图书总览
void del_book(); //删除图书
void amend_book(); //修改信息
book ss();
void find_name_book(); //按书名查询
void find_author_book(); //按作者查询
void find_number_book(); //按登录号查询
void find_publish_book(); //按出版社查询
void fuzzy_search(); //模糊查找
struct user
{//存放用户名的结构体
char pwd[20];
}us;
char username[15]=“admin”,pwd1[100]; //username[15]原始账号,pwd1修改密码时的比较
void HideCursor() //隐藏光标
{
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
void toxy(int x, int y) //将光标移动到X,Y坐标处
{
COORD pos = { x , y };
HANDLE Out = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(Out, pos);
}
void menu() //菜单
{
time_t T; //获取系统时间
struct tm * timenow;
time ( &T );
timenow = localtime ( &T );
do
{
system(“cls”); //清屏
HideCursor(); //隐藏光标
printf("\n\n");
printf("\t 当前系统时间是: %s",asctime (timenow) );
system("color 3f");//设置一个好看的颜色
char t;
toxy(50,5);//将光标移动到(50,5)坐标处
printf(" 图书管理信息系统 ");
toxy(48,8);
printf("| 1.图书入库 |");
toxy(48,10);
printf("| 2.修改信息 |");
toxy(48,12);
printf("| 3.删除信息 |");
toxy(48,14);
printf("| 4.图书查询 |");
toxy(48,16);
printf("| 5.图书总览 |");
toxy(48,18);
printf("| 6.退出软件 |");
toxy(48,20);
printf("| 7.修改密码 |");
t=getch(); //不回显函数
switch(t)
{
case '1':input_book();break;
case '2':amend_book();break;
case '3':del_book();break;
case '4':find_book();break;
case '5':print_book();break;
case '6':over();break;
case '7':gaimi();break;
default :break;
}
}while(1);
}
book ss() //将文件中的内容读出到链表中,返回值为表头地址
{
FILE *fp; //文件指针
int n=0;
book head=NULL;
book p2,p,pr=NULL;
fp=fopen("mybook","ab+"); //以只读的方式打开文件
if(fp==NULL)
{
printf("cannot open file\n");
}
while(!feof(fp)) //判断文件位置标志是否移动到文件末尾
{
n++;
p=(book)malloc(N); //向内存申请一段空间
fread(p,N,1,fp); //将fp所指向的文件中的内容赋给p
if(n==1)
{
head=p;
p2=p;
}
else //创建链表
{
pr=p2;
p2->next=p;
p2=p;
}
}
if(pr!=NULL)
pr->next=NULL;
else
head=NULL;
fclose(fp); //关闭文件
return head; //返回头指针
}
void input_book() //图书录入
{
do
{
system("cls");
system("color 3f");
char t;
book p;
p=(book)malloc(N); //申请空间
//输入图书信息
toxy(48,8);
printf("请输入图书登录号(小于10位数):");
scanf("%s",p->number);getchar();
toxy(48,10);
printf("请输入书名(小于10位数):");
scanf("%s",p->name);getchar();
toxy(48,12);
printf("请输入作者名(小于10位数):");
scanf("%s",p->author);getchar();
toxy(48,14);
printf("请输入图书类别(小于10位数):");
scanf("%s",p->type);getchar();
toxy(48,16);
printf("请输入图书出版单位(小于10位数):");
scanf("%s",p->publish);getchar();
toxy(48,18);
printf("请输入图书出版时间(小于8位数):");
scanf("%s",p->time);getchar();
toxy(48,20);
printf("请输入图书价格:");
scanf("%f",&p->price);getchar();
toxy(48,22);
printf("请输入图书数量:");
scanf("%d",&p->num);
save_book(p);
toxy(48,24);
printf("正在保存....");
Sleep(500); //暂停0.5秒
system("cls");
toxy(46,8);
printf("-------------------------");
toxy(46,9);
printf("| |");
toxy(46,10);
printf("| 保存成功!是否继续? |");
toxy(46,12);
printf("| 1.是 2.否 |");
toxy(46,13);
printf("| |");
toxy(46,14);
printf("-------------------------");
while(1) //利用死循环可有效防止其他按键干扰
{
t=getch();
if(t=='1')
{
break;
}
else if(t=='2')
{
menu();
}
}
}while(1);
}
void amend_book() //修改图书信息
{
do
{
system("cls");
system("color 3f");
book head,p;
int i=11,j=0,x;
char ch,t;
FILE *fp; //文件指针
char _name[10];
char number[10]; //登录号
char name[10]; //书名
char author[10]; //作者名
char type[10]; //类型
char publish[10]; //出版单位
char time[8]; //出版时间
float price; //价格
int num; //数量
head=ss();
p=head;
toxy(48,10);
printf("请输入你要修改的图书的书名:");
gets(_name);
while(p!=NULL) //初始化p->x为0
{
p->x=0;
p=p->next;
}
p=head; //让p重新指向表头
toxy(20,5);
printf("***********************************************图书信息******************************************************\n");
toxy(20,8);
printf("-------------------------------------------------------------------------------------------------------------\n");
toxy(20,10);
printf("登录号 书名 作者名 图书类别 出版单位 出版时间 价格 数量\n");
toxy(20,15);
printf("-------------------------------------------------------------------------------------------------------------");
while(p!=NULL)
{
if(p!=NULL&&strcmp(p->name,_name)==0)
{
toxy(20,i);
j++;
printf("\n%12d:%12s%12s%12s%14s %14s %14s %10.2f%12d\n",j,p->number,p->name,p->author,p->type,p->publish,p->time,p->price,p->num);
p->x=j; //给符合查询标准的结点标号
i++;
}
p=p->next;
}
if(j==0) //如果j=0,即没有进入前面的搜索循环,也就是没有找到相应的信息
{
toxy(50,i);
printf("\n\t\t\t\t\t\t没有找到相应的信息!(按0返回,按1重新搜索)");
while(1) //死循环是为了防止除0和1的其他按键干扰
{
ch=getch();
if(ch=='0')
{
menu();break;
}
else if(ch=='1')
{
break;
}
}
if(ch=='1') //如果输入的ch等于1,则结束本次循环
continue;
}
while(1)
{
toxy(45,i);
printf("\n\t\t\t\t\t\t请输入您要修改的图书的编号:");
scanf("%d",&x);getchar();
if(x>j||x==0)
{
toxy(45,++i);
printf("输入错误,请重新输入!");
Sleep(500);
}
else
{
break;
}
}
p=head; //让p重新指向表头
while(p!=NULL&&p->x!=x) //遍历链表查询符合条件的结点
{
p=p->next;
}
if(p) //如果p不为空
{
system("cls");
//输入要修改的信息
toxy(48,8);
printf("请输入图书登录号(小于10位数):");
scanf("%s",number);getchar();strcpy(p->number,number);
toxy(48,10);
printf("请输入书名(小于10位数):");
scanf("%s",name);getchar();strcpy(p->name,name);
toxy(48,12);
printf("请输入作者名(小于10位数):");
scanf("%s",author);getchar();strcpy(p->author,author);
toxy(48,14);
printf("请输入图书类别(小于10位数):");
scanf("%s",type);getchar();strcpy(p->type,type);
toxy(48,16);
printf("请输入图书出版单位(小于10位数):");
scanf("%s",publish);getchar();strcpy(p->publish,publish);
toxy(48,18);
printf("请输入图书出版时间(小于8位数):");
scanf("%s",time);getchar();strcpy(p->time,time);
toxy(48,20);
printf("请输入图书价格:");
scanf("%f",&price);getchar();p->price=price;
toxy(48,22);
printf("请输入图书数量:");
scanf("%d",&num);getchar();p->num=num;
}
system("color 3f");
toxy(46,8);
printf("-------------------------\n");
toxy(46,9);
printf("| |");
toxy(46,10);
printf("| 是否确认修改? |\n");
toxy(46,12);
printf("| 1.是 2.否 |\n");
toxy(46,13);
printf("| |\n");
toxy(46,14);
printf("-------------------------\n");
while(1) //利用死循环防止其他按键干扰
{
t=getch();
if(t=='1')
{
break;
}
else if(t=='2')
{
menu();
}
}
system("cls");
toxy(46,10);
printf("正在修改,请稍后....");
fp=fopen("mybook","wb"); //以只写的方式打开名为mybook的二进制文件,打开的同时清空文件中的内容
if(fp==NULL)
{
printf("cannot open file");
}
if(fwrite(head,N,1,fp)!=1) //将head写入fp所指向的文件中
{
printf("write error!");
}
fclose(fp); //关闭文件
if(head!=NULL) //如果head不为空
{
p=head->next; //让p指向第二个结点
fp=fopen("mybook","ab"); //以追加的方式打开文件
if(fp==NULL)
{
printf("cannot open file");
}
while(p!=NULL)
{
if(fwrite(p,N,1,fp)!=1)//将p写入fp所指向的文件中
{
printf("write error!");
}
p=p->next;
}
fclose(fp); //关闭文件
}
Sleep(500); //暂停0.5秒
system("cls");
toxy(46,10);
printf("修改成功!即将自动返回主菜单....");
Sleep(500);
break;
}while(1);
}
void del_book() //删除信息
{
do
{
system("cls");
system("color 3f");
FILE *fp;
book head,p,pre=NULL;
int j=0,x,i=11;
char name[10];
char t,c,ch;
head=ss(); //调用函数,返回表头地址
toxy(48,10);
printf("请输入你要删除的图书的书名:");
scanf("%s",name);
p=head;
while(p!=NULL)
{
p->x=0;
p=p->next;
}
p=head;
toxy(20,5);
printf("***********************************************图书信息******************************************************");
toxy(20,8);
printf("-------------------------------------------------------------------------------------------------------------");
toxy(20,9);
printf("登录号 书名 作者名 图书类别 出版单位 出版时间 价格 数量");
toxy(20,10);
printf("-------------------------------------------------------------------------------------------------------------");
while(p!=NULL)
{
if(p!=NULL&&strcmp(p->name,name)==0)
{
toxy(20,i);
j++;
printf("%d:%s%14s%14s%14s %14s %18s %.2f%12d\n",j,p->number,p->name,p->author,p->type,p->publish,p->time,p->price,p->num);
p->x=j;
i++;
}
p=p->next;
}
if(j==0) //如果j=0,即没有进入前面的搜索循环,也就是没有找到相应的信息
{
toxy(50,i);
printf("没有找到相应的信息!(按0返回,按1重新搜索)");
while(1) //死循环是为了防止除0和1的其他按键干扰
{
ch=getch();
if(ch=='0')
{
menu();break;
}
else if(ch=='1')
{
break;
}
}
if(ch=='1') //如果输入的ch等于1,则结束本次循环
continue;
}
while(1)
{
toxy(45,i);
printf("请输入您要删除的图书的编号:");
scanf("%d",&x);getchar();
if(x>j||x==0)
{
toxy(45,++i);
printf("输入错误,请重新输入!");
Sleep(500);
}
else
{
break;
}
}
system("color 3f");
toxy(46,8);
printf("-------------------------");
toxy(46,9);
printf("| |");
toxy(46,10);
printf("| 是否确认删除? |");
toxy(46,12);
printf("| 1.是 2.否 |");
toxy(46,13);
printf("| |");
toxy(46,14);
printf("-------------------------");
while(1)
{
t=getch();
if(t=='1')
{
break;
}
else if(t=='2')
{
menu();
}
}
p=head;
while(p!=NULL&&p->x!=x)
{
pre=p;
p=p->next;
}
if(p!=NULL)
{
if(pre==NULL)
{
head=head->next;
}
else
{
pre->next=p->next;
}
}
free(p);
fp=fopen("mybook","wb");
if(fp==NULL)
{
printf("cannot open file");
}
if(fwrite(head,N,1,fp)!=1)
{
printf("write error!");
}
fclose(fp);
if(head!=NULL)
{
p=head->next;
fp=fopen("mybook","ab");
if(fp==NULL)
{
printf("cannot open file");
}
while(p!=NULL)
{
if(fwrite(p,N,1,fp)!=1)
{
printf("write error!");
}
p=p->next;
}
fclose(fp);
}
system("cls");
toxy(46,10);
printf("正在删除,请稍后....");
Sleep(500);
system("cls");
toxy(46,8);
printf("-------------------------");
toxy(46,9);
printf("| |");
toxy(46,10);
printf("| 删除成功,是否继续? |");
toxy(46,12);
printf("| 1.是 2.否 |");
toxy(46,13);
printf("| |");
toxy(46,14);
printf("-------------------------");
while(1)
{
c=getch();
if(c=='1')
{
break;
}
else if(c=='2')
{
menu();
}
}
}while(1);
}
void print_book() //图书总览
{
system("cls");
system("color 3f");
book head,p;
int i=11;
int sum=0;
head=ss();
toxy(20,5);
printf("***********************************************图书总览******************************************************\n");
toxy(20,8);
printf("-------------------------------------------------------------------------------------------------------------\n");
toxy(20,9);
printf("登录号 书名 作者名 图书类别 出版单位 出版时间 价格 数量\n");
toxy(20,11);
printf("-------------------------------------------------------------------------------------------------------------\n");
if(head==NULL)
{
toxy(45,11);
printf("书库暂时没有书哦~赶快去添加几本吧^_^(按任意键返回)");
getch();
menu();
}
p=head;
while(p!=NULL)
{
toxy(20,i);
printf("%s%14s%14s%14s %14s %18s %.2f%12d\n",p->number,p->name,p->author,p->type,p->publish,p->time,p->price,p->num);
i++;
sum+=p->num;//计算图书总量
p=p->next;
}
toxy(48,7);
printf("图书总量为:%d",sum);
toxy(45,i);
printf("按任意键返回");
getch();//不回显函数
}
void find_book() //查询图书
{
do
{
system("cls"); //清屏
system("color 3f");
char t;
toxy(50,5);
printf(" 图书查询");
toxy(48,8);
printf("| 1.书名 查询 |");
toxy(48,10);
printf("| 2.作者 查询 |");
toxy(48,12);
printf("| 3.登录号查询 |");
toxy(48,14);
printf("| 4.出版社查询 |");
toxy(48,16);
printf("| 5.模糊 查询 |");
toxy(50,18);
printf("按0返回主菜单");
t=getch();
switch(t)
{
case '0':menu();break;
case '1':find_name_book();break;
case '2':find_author_book();break;
case '3':find_number_book();break;
case '4':find_publish_book();break;
case '5':fuzzy_search();break;
default :break;
}
}while(1);
}
void find_name_book() //按名字查询
{
system("cls");
system(“color 3f”);
book head,p;
int i=11;
head=ss();
char name[10];
toxy(48,8);
printf("请输入您要查询图书的书名:");
gets(name);
toxy(48,10);
printf("正在查询....");
Sleep(500);
p=head;
toxy(20,5);
printf("***********************************************图书总览******************************************************");
toxy(20,8);
printf("-------------------------------------------------------------------------------------------------------------");
toxy(20,9);
printf("登录号 书名 作者名 图书类别 出版单位 出版时间 价格 数量");
toxy(20,10);
printf("-------------------------------------------------------------------------------------------------------------");
while(p!=NULL)
{
if(p!=NULL&&strcmp(p->name,name)==0)
{
toxy(20,i);
printf("%s%14s%14s%14s %14s %18s %.2f%12d\n",p->number,p->name,p->author,p->type,p->publish,p->time,p->price,p->num);
i++;
}
p=p->next;
}
toxy(45,i);
printf("按任意键返回!");
getch();
find_book();
}
void find_author_book() //按作者名查询
{
system("cls");
system("color 3f");
book head,p;
int i=11;
head=ss();
char author[10];
toxy(48,8);
printf("请输入您要查询图书的作者名:");
gets(author);
toxy(48,10);
printf("正在查询....");
Sleep(500);
p=head;
toxy(20,5);
printf("***********************************************图书总览******************************************************");
toxy(20,8);
printf("-------------------------------------------------------------------------------------------------------------");
toxy(20,9);
printf("登录号 书名 作者名 图书类别 出版单位 出版时间 价格 数量");
toxy(20,10);
printf("-------------------------------------------------------------------------------------------------------------");
while(p!=NULL)
{
if(p!=NULL&&strcmp(p->author,author)==0)
{
toxy(20,i);
printf("%s%14s%14s%14s %14s %18s %.2f%12d\n",p->number,p->name,p->author,p->type,p->publish,p->time,p->price,p->num);
i++;
}
p=p->next;
}
toxy(45,i);
printf("按任意键返回!");
getch();
find_book();
}
void find_number_book() //按图书编号查询
{
system("cls");
system(“color 3f”);
book head,p;
int i=11;
head=ss();
char number[10];
toxy(48,8);
printf("请输入您要查询图书的登录号:");
gets(number);
toxy(48,10);
printf("正在查询....");
Sleep(500);
p=head;
toxy(20,5);
printf("***********************************************图书总览******************************************************");
toxy(20,8);
printf("-------------------------------------------------------------------------------------------------------------");
toxy(20,9);
printf("登录号 书名 作者名 图书类别 出版单位 出版时间 价格 数量");
toxy(20,10);
printf("-------------------------------------------------------------------------------------------------------------");
while(p!=NULL)
{
if(p!=NULL&&strcmp(p->number,number)==0)
{
toxy(20,i);
printf("%s%14s%14s%14s %14s %18s %.2f%12d\n",p->number,p->name,p->author,p->type,p->publish,p->time,p->price,p->num);
i++;
}
p=p->next;
}
toxy(45,i);
printf("按任意键返回!");
getch();
find_book();
}
void find_publish_book() //按出版商查询
{
system("cls");
system("color 3f");
book head,p;
int i=11;
head=ss();
char publish[10];
toxy(48,8);
printf("请输入您要查询图书的出版社:");
gets(publish);
toxy(48,10);
printf("正在查询....");
Sleep(500);
p=head;
toxy(20,5);
printf("***********************************************图书总览******************************************************");
toxy(20,8);
printf("-------------------------------------------------------------------------------------------------------------");
toxy(20,9);
printf("登录号 书名 作者名 图书类别 出版单位 出版时间 价格 数量");
toxy(20,10);
printf("-------------------------------------------------------------------------------------------------------------");
while(p!=NULL)
{
if(p!=NULL&&strcmp(p->publish,publish)==0)
{
toxy(20,i);
printf("%s%14s%14s%14s %14s %18s %.2f%12d\n",p->number,p->name,p->author,p->type,p->publish,p->time,p->price,p->num);
i++;
}
p=p->next;
}
toxy(45,i);
printf("按任意键返回!");
getch();
find_book();
}
void fuzzy_search() //模糊查询
{
system("cls");
system(“color 3f”);
book head,p;
int i=11;
head=ss();
char information[10];
toxy(48,8);
printf("请输入您要查询图书的信息:");
gets(information);
toxy(48,10);
printf("正在查询....");
Sleep(500);
p=head;
toxy(20,5);
printf("***********************************************图书总览******************************************************");
toxy(20,8);
printf("-------------------------------------------------------------------------------------------------------------");
toxy(20,9);
printf("登录号 书名 作者名 图书类别 出版单位 出版时间 价格 数量");
toxy(20,10);
printf("-------------------------------------------------------------------------------------------------------------");
while(p!=NULL)
{
if(p!=NULL&&(strcmp(p->name,information)==0||strcmp(p->author,information)==0||strcmp(p->number,information)==0||strcmp(p->publish,information)==0))
{
toxy(20,i);
printf("%s%14s%14s%14s %14s %18s %.2f%12d\n",p->number,p->name,p->author,p->type,p->publish,p->time,p->price,p->num);
i++;
}
p=p->next;
}
toxy(45,i);
printf("按任意键返回!");
getch();
find_book();
}
void save_book(book p) //将p中内容写入文件
{
FILE *fp; //文件指针
fp=fopen("mybook","ab"); //以追加的方式打开名字为mybook的二进制文件
if(fp==NULL)
{
printf("cannot open file");
}
if(fwrite(p,N,1,fp)!=1) //将p所指向的一段大小为N的内容存入fp所指向的文件中
{
printf("write error");
}
fclose(fp); //关闭文件
}
void over() //退出软件
{
system(“color 3f”);
char t;
toxy(48,11);
printf("-----------------------");
toxy(48,12);
printf("| 您确定要退出吗? |");
toxy(48,14);
printf("| 1.确定 2.取消 |");
toxy(48,15);
printf("-----------------------");
while(1)
{
t=getch(); //输入t
switch(t)
{
case '1':
system("cls");
system("color 3f");
toxy(48,10);
printf("正在安全退出....");
Sleep(1000); //暂停1秒
system("cls");
system("color 3f");
toxy(48,10);
printf("已安全退出软件");
toxy(48,12);
printf("谢谢使用!");
toxy(48,14);
printf("by-by^_^");
exit(0); break; //终止程序
case '2':
menu(); break; //调用函数,进入菜单
default :break;
}
}
}
void login()//登录界面
{
int i=0,k=0,j;
FILE *fp;
if((fp=fopen("name.txt","r"))==NULL)
{
strcpy(us.pwd,"20190611");
}//如果文件打开错误初始密码
fscanf(fp,"%s",us.pwd);
char username1[15]; //定义与原始密码相比较的变量
system("color 3f"); //系统函数,color显示颜色,3湖蓝色,f是亮白色
printf("\n\n");
printf("\t 系统默认用户名:admin,密码:20190611\n");
printf("\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("\t┃**********************************************************┃\n");
printf("\t┃***┏━━━━━━━━━━━━━━━━━━━━━━━━┓***┃\n");
printf("\t┃***┃************************************************┃***┃\n");
printf("\t┃***┃*** ****┃***┃\n");
printf("\t┃***┃*** 欢迎使用图书管理信息系统 ****┃***┃\n");
printf("\t┃***┃*** ****┃***┃\n");
printf("\t┃***┃*** ****┃***┃\n");
printf("\t┃***┃*** 张锦涛 ****┃***┃\n");
printf("\t┃***┃*** ****┃***┃\n");
printf("\t┃***┃*** 2019年6月11日 ****┃***┃\n");
printf("\t┃***┃*** ****┃***┃\n");
printf("\t┃***┃************************************************┃***┃\n");
printf("\t┃***┗━━━━━━━━━━━━━━━━━━━━━━━━┛***┃\n");
printf("\t┃**********************************************************┃\n");
printf("\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
for(i=0;i<3;i++){
printf("\n请输入用户名:");
gets(username1);
printf("\n请输入6位密码:");
for(j=0;j<100;j++)
{
pwd1[j]=getch();
if(pwd1[j]=='\r')
break;
printf("*");
}
pwd1[j]='\0';
if((strcmp(username,username1)==0)&&(strcmp(us.pwd,pwd1)==0))
{
printf("\n\n您已经成功登录");
k=1;
for(i=0;i<20;i++){
printf(".");
Sleep(100); }
system("cls");
menu(); //跳转到主界面
break;
}
else
printf(“\n\n用户名或密码无效,请重新输入:\n”);
continue;
}
if(k==0)
printf(“\n连续输入错误3次将退出程序\n”);
Sleep(1000); //程序暂停函数(单位毫秒),本次暂停1000毫秒
return;//连续三次错误跳转退出界面
}
void gaimi()//修改密码程序
{
int j;
system("cls");
FILE *fp;
if((fp=fopen("name.txt","w"))==NULL){
printf("文件打开错误!");exit(0); }
printf("\n请输入您的原始密码:\n");
fflush(stdin); //清除缓冲
for(j=0;j<100;j++){
us.pwd[j]=getch();
if(us.pwd[j]=='\r')
break;
printf("*"); }
us.pwd[j]='\0';
if((strcmp(us.pwd,pwd1)==0)){
printf("\n请输入您要修改的密码\n");
for(j=0;j<100;j++){
us.pwd[j]=getch();
if(us.pwd[j]=='\r')
break;
printf("*"); }
us.pwd[j]='\0';
fflush(stdin); //清除缓冲
printf("\n请再次确认你的密码\n");
for(j=0;j<100;j++){
pwd1[j]=getch();
if(pwd1[j]=='\r')
break;
printf("*"); }
pwd1[j]='\0';
if((strcmp(us.pwd,pwd1)==0)){
printf("\n\n密码修改成功,请重新登录。\n");
fprintf(fp,"%s",us.pwd);
Sleep(2000);
system("cls");
login(); }
else {
printf("\n\n两次密码不符合,本次服务到此结束!\n\n");
printf("\n\n按任意键返回\n");
c=getch();
system("cls");
menu();
}
}
else{
printf("\n密码输入错误!\n\n");
printf("\n\n按任意键返回\n");
c=getch();
system("cls");
menu();
}
}
int main() //主函数
{
login();
return 0;
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/183144.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...