效果如上
一共就这几个函数
#include<stdio.h>
#include<string.h>
#define BOOK_NUM 50
void addBook();
void login_interface();
void login_password();
void choose_identify();
void lover();
void change_password();
void searching();
void quit();
void borrow();
void rank();
typedef struct book{
char name[10];
double price;
int inventory;
int numbers;
}BOOK;
char sys_password[10]={"11"}; //密码
int book_num=0; //不同下标书的总数
int book_number=0; //某本书的编号 一共输入了多少个书编号
BOOK bk[BOOK_NUM]; //结构体数组
int borrow_nums[50]; //借阅书总数
//int booknum_notcover; //书的数量不被覆盖
//主函数
int main(){
char d;
while(1){ //一直玩
printf(" \n");
printf(" \n");
printf(" \n");
printf(" WELCOME LIBRARY MANAGER :\n");//进入界面
printf("\n");
printf("\n");
//登录密码函数
login_password();
GOGO:
//选择识别函数
choose_identify();
printf(" 进入菜单请输入Y/y: \n");
scanf(" %c",&d);
system("cls");
if(d=='Y'||d=='y'){
goto GOGO;
}
return 0;
}
}
//登录密码函数
void login_password(){
printf("密码函数:\n");
char enter_password[10];
PASSWORD_AGAIN:
printf("请输入密码:\n");
scanf("%s",enter_password);
if(strcmp(sys_password,enter_password)==0){
//choose_identify();
}
else{
printf(" enter password invalid!! please again :\n");
goto PASSWORD_AGAIN;
}
}
//选择识别函数
void choose_identify(){
char a;
login_interface();
printf("choose_identify------选择识别函数:\n");
printf("please enter a optin<*.*>请输入菜单选项:\n");
scanf(" %c",&a);
switch(a){
case '0':lover(); break;
case '1':addBook(); break; //调用添加新书函数
case '2':change_password(); break;
case '3':searching(); break; //检索
case '4':borrow(); break; //借阅
case '5':rank(); break;
default :printf(" input is invaid!:\n"); break;
}
}
//检索函数
void searching(){
int i=0;
BOOK *p;
p= bk;
if(book_num>0){
// printf("键入新书名please enter the book`s name this %d !!book:\n",book_number);
for(i=0;i<=book_number-1;i++){ //某书的初始值为1,所以减去1从头开始检索
printf("\n");
printf("请输入书名please enter the book`s name:%s\n",(p+i)->name);
printf("请输入书索引please enter the book`s invontory:%d\n",(p+i)->inventory);
printf("请输入书价格please enter the book`s price:%.4lf\n",(p+i)->price);
printf("请输入书数量please enter the book`s numbers:%d",(p+i)->numbers);
printf("\n");
}
}
else{
printf("没有书,请添加not have book :\n");
}
}
//改密码函数
void change_password(){
printf("change_password-------------改密码函数:\n");
char new_password1[10];
char new_password2[10];
//重新登录
login_password();
NEW_PASSWORD:
system("cls");
printf("please enter a new password键入新密码:\n");
scanf(" %s",new_password1);
printf("please enter a new password again 键入旧密码:\n");
scanf(" %s",new_password2);
//密码对比
if(strcmp(new_password1,new_password2)==0){
printf("更改成功请重新输入Change password sccessful !plesase login again !:\n");
//密码覆盖
strcpy(sys_password,new_password2);
login_password();
}
else{
printf("两次密码不一致,The two passwords are inconsistent,please try again:\n");
goto NEW_PASSWORD;
}
}
//界面函数
void login_interface(){
//lover();
printf(" =======================\n");
printf(" WELCOME LIBRARY MANAGER \n");
printf(" ======================****************=========================\n");
printf(" \n");
printf(" = =\n");
printf(" \n");
printf(" = 【0】Return to main screen 【1】adding new books =\n");
printf(" \n");
printf(" = 【2】change password 【3】sreaching =\n");
printf(" \n");
printf(" = 【4】 borrow 【5】rank =\n");
printf(" \n");
printf(" = =\n");
printf(" ==========================*********==============================\n");
}
//添加新书函数
void addBook(){
//j;
int i;
//int booknum_notcover; //书不被之前的书覆盖
char cntinu;
BOOK *p;
p=bk;
START:
for(i=book_number;i<50;i++){ //书下标的循环 从上一本书的下表开始。
//while(i=book_number){
printf("键入新书名please enter the book`s name this %d !!book:\n",book_number);
scanf("%s",(p+i)->name);
printf("键入新书索引please enter the book`s inventory:\n");
scanf("%d",&bk[i].inventory); //&(bk+m)->date
printf("键入新书价格please enter the book`s price:\n");
scanf("%lf",&(p+i)->price);
printf("键入新书数量please enter the book`s numbers:\n");
scanf("%d",&(p+i)->numbers);
book_num=book_num+(p+i)->numbers;
book_number++; //添加到第几本书
printf("退出请键入Y/y,out please press Y/y:\n");
scanf(" %c",&cntinu);
if(cntinu=='Y'||cntinu=='y'){
printf("已退出OUTLINE!:\n");
system("cls");
break;
}
// else{
// goto START;人家又不是自己不会跳 脱裤子放屁
// }
}
}
//退出函数
void quit(){
//choose_identify();
system("pause");
system("cls");
}
//借阅函数
void borrow(){
int i,j,z; //书的数量 可以为负数 ,解决第0号书的问题,0号书借走以后,数量可以为负数
//书的数组地址,书的 数组地址不可以为负数。
BOOK *p;
char next;
char borrow_name[10];
p=bk;
int y=1;
//j=*((p+i)->number); //Z某本书的数量 ******
NEXT_BORROW:
printf("键入要的借书名please enter book`s name to borrow:\n");
scanf("%s",borrow_name);
//解决了 书的数量为负数的问题;小于0的时候 就输出 没书了
//printf("书的总数%d\n",book_num);
if(book_num>0){ //图书管还有书的时候
// printf(" *************** !!!:\n");
for(z=0;z<=book_num;z++){ //书的编号
// for(i=0;i<=(p+z)->numbers;i++){ //指向某本书的 数量
if(strcmp(borrow_name,bk[z].name)==0 && bk[z].numbers>0){ //判断这本书的书名以及余量
// printf("bk[i].name:%s\n",bk[i].name);
printf("借书成功,borroW successful !!!:\n");
(p+z)->numbers--;//这本书的数量减去1 //书的数量变量的问题,一直在弹出没有书
book_num--; //书的总数减去1
borrow_nums[z]++; //借阅书总数++
if(strcmp(borrow_name,bk[z].name)==0){ //判断 借到书之后的流程
printf("继续借书请按Y/y NEXT TO borrow?please enter a word Y/y:\n");
scanf(" %c",&next); //输入 失败= 这个地方是不报错的
if(next=='Y'||next=='y'){ //继续借书 分支语句可以 只有 if
printf("enter Y:\n");
goto NEXT_BORROW;
}
else{
break;
}
}
else{ //没有借到书 退出
printf("没有这本书,或 余量不足 NOT have this book:\n");
//break;
}
}
}
}
else{
printf("本地没有书 THERE NOT have book !!!:\n");
}
}
//热度排行函数
void rank(){
int i,j;
int c;
BOOK *p;
p=bk;
//遍历图书馆里的书、根据索引
//将他们存入不同的变量
//变量的冒泡排序
//根据索引搞
//printf(" RANK:%d\n",book_number+1);
if(borrow_nums[0]>0){
for(i=0;i<book_number;i++){
printf("\n");
for(j=0;j<book_number-i-1;j++){ //冒泡排序
if(borrow_nums[i]<borrow_nums[i+1]){ //
c=borrow_nums[i+1];
borrow_nums[i+1]=borrow_nums[i];
borrow_nums[i]=c;
}
}
printf(" BOOK:%s RANK:%d\n",(p+i)->name,borrow_nums[i]);
}
}
}
//心
void lover(){
float a,x,y;
for(y=1.5f; y>-1.5f; y-=0.1f)
{
for(x=-1.5f; x<1.5f; x+=0.05f)
{
a = x*x+y*y-1;
//这里的@符号即为打印出的心形图案符号,可更改
char ch = a*a*a-x*x*y*y*y<=0.0f?'@':' ';
putchar(ch);
//或者putchar(a*a*a-x*x*y*y*y<=0.0f?'*':' ');
}
//printf("\n");
system("pause");
}
}
**总结:**算是个小项目把,难度不大,里面用到了 指针,指针的调用,以及结构体,还复习了一下冒泡算法。
有点难度的点:就是在处理借书时的各个变量,借书的本书,借的书的编号,这些地方我都用了,全局变量来处理,虽然不是很好,但是我也不想折腾了。。。
已解决与没有解决的BUG:√1借书函数,只借一本书 第二本第三本借不到
√2rank函数
√3书不被之前的书覆盖
√4索引的时候 显示不出来后面加的书、
5请输入新密码 循环
√6书没了还能借到
√7书的数量为负数
√8借不到后面两本书,一直借 第一本书 的数量减少
9 没有书不要显示出来
√11书总体数量有问题
12按任意键继续