#include <stdio.h>
#include <string.h>
#include <cstdlib>
//存放书籍信息
typedef struct Book {
char bkname[20];
int bookid;
int lend;
float price;
int kucun;
} Book ;
struct Book book[20];
int xlh;//定义一个变量为书籍序列号
int crzl;//书籍的存入总量
int i = 0;//输入书籍的次数
int num;//用于防止再次登录后图书信息归零
//存放用户信息
typedef struct users { //typedef 可以定义结构体别名
char id[11]; //账号
char pwd[20]; //密码
char name[15];//姓名为字符串
} users ;
struct users per[2];
int number = 1;//限制单次注册账号数量为1
struct users pe[2];
//存储用户账号数据
char id[11]; //账号
char pwd[20]; //密码
char name[15];//姓名为字符串
//欢迎界面
void welcome() {
printf("************欢迎使用图书管理系统*************\n");
printf("1、管理员身份登录\n");
printf("2、普通用户身份登录\n");
printf("3、用户注册\n");
printf("4、退出程序\n");
printf("***********************************************\n");
}
//注册系统
void zhuce() {
int t;
for (t = 0; t < number; t++) {
printf("请输入您注册的账号\n");
scanf("%s", &per[t].id);
printf("请输入密码\n");
scanf("%s", &per[t].pwd);
printf("请输入用户名\n");
scanf("%s", &per[t].name);
}
}
//登录系统
int denglu() {
int sf = 0;
printf("请输入账号\n");
scanf("%s", &id);
if (strcmp(id, per[0].id) == 0) {
//break;
} else {
printf("账号错误,请核对后输入\n");
scanf("%s", &id);
}
printf("请输入密码\n");
scanf("%s", &pwd);
if (strcmp(pwd, per[0].pwd) == 0) {
sf = 1;
printf("登录成功\n");
} else {
printf("密码错误,请核对后输入\n");
scanf("s", &pwd);
}
return 0;
}
//管理员的功能菜单
void manager() {
printf("***********欢迎进入管理员界面************\n");
printf(" 请选择您的功能\n ");
printf("1、\t添加图书信息\t2、删除图书信息\n ");
printf("3、\t查询图书信息\t4、修改图书信息\n ");
printf("5、返回上一级菜单\n");
printf("*******************************************\n");
}
//管理员功能的实现
//结构体变量输入函数,录入书籍
void putbook() {
char name[20];
char bookid[10];
int lend[10];
int price[10];
char kucun[10];
int h;
printf("请输入录入书记的数量\n");
scanf("%d", &h);
for (i = num; i < num + h; i++) {
printf("请输入书籍编号\n");
scanf("%d", &book[i].bookid );
printf("请输入书籍的借阅量\n");
scanf("%d", &book[i].lend);
printf("请输入书籍的价格\n");
scanf("%f", &book[i].price);
printf("请输入书籍的库存\n");
scanf("%d", &book[i].kucun);
printf("请输入书籍名称\n");
scanf("%s", &book[i].bkname);
}
num = num + h;
}
//显示书籍
void Showbook() {
for (i = 0; i < num; i++) {
printf("书籍序号\t 书籍名称\t 书籍编号\t 书籍借阅量\t 书籍的价格\t 书籍的库存\n");
printf(" %d\t %s\t %d\t %d\t %f\t %d\n", i, &book[i].bkname, book[i].bookid,
book[i].lend, book[i].price, book[i].kucun);
}
}
//冒泡排序
void sort(Book book[], int n) {
int j;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j--) {
if (book[j].lend < book[j - 1].lend) {
book[19] = book[j];
memcpy(&book[j], &book[j + 1], sizeof(Book)); //交换数组的位置
book[j + 1] = book[19];
}
}
}
}
//删除图书数
void DeleteBook() {
printf("请输入需要删除的图书序号");
scanf("%d", &i); //输入修改的序号
for (i = 0; i < 20; i++) {
book[i].price = 0;
book[i].lend = 0;
book[i].bookid = 0;
book[i].kucun = 0;
//book[xlh].bkname = '\0';
//memcpy(&book[i], &book[i + 1], sizeof(book));
book[i] = book[i + 1];
}
printf("删除成功!\n");
}
//修改书籍数据
void updata() {
printf("请输入需要修改图书的序号");
scanf("%d", &xlh); //输入修改的序号
printf("请输入修改后的图书名称");
scanf("%s", &book[xlh].bkname);
printf("请输入修改后的图书编号");
scanf("%d", &book[xlh].bookid);
printf("请输入修改后的图书借阅量");
scanf("%d", &book[xlh].lend);
printf("请输入修改后的图书价格");
scanf("%f", &book[xlh].price);
printf("请输入修改后的图书库存");
scanf("%d", &book[xlh].kucun);
}
//普通用户菜单界面
void comview() {
printf("*************普通用户菜单界面***************\n");
printf(" 请选择您的功能\n ");
printf("1、 查询图书信息\n");
printf("2、 借书 \n");
printf("3、 还书 \n");
printf("4、 修改账户密码 \n");
printf("6、返回上一级菜单\n");
printf("*********************************************\n");
}
//借书
void lendbook() {
printf("请输入您需要借阅的书籍序列号");
scanf("%d", &xlh);
if (book[xlh].kucun - book[xlh].lend <= 0) {
printf("很抱歉该图书已被全部借走啦,下次早点来吧。\n");
} else {
printf("请输入您的用户名\n");
scanf("%s", &name);
book[xlh].kucun --;//库存减一
book[xlh].lend ++;//借阅量加一
printf("借书完成,享受阅读的乐趣吧。\n");
}
}
//还书
void huanbook() {
printf("请输入您需要归还的书籍序列号");
scanf("%d", &xlh);
printf("请输入您的用户名\n");
scanf("%s", &name);
book[xlh].kucun ++;//库存加一
book[xlh].lend --;//借阅量减一
printf("感谢您如约完成了还书,期待您的下次使用\n");
}
//修改用户账号的密码
void xiugaimima() {
int xz;//用户的选择
printf("请输入您的账号");
scanf("%s", &id);
if (strcmp(id, per[0].id) == 0) {
} else {
printf("账号错误,请核对后输入\n");
scanf("%s", &id);
}
printf("请输入原密码\n");
scanf("%s", &pwd);
if (strcmp(pwd, per[0].pwd) == 0) {
printf("请输入新的密码");
scanf("%s", per[0].pwd);
} else {
printf("密码错误,请核对后输入\n");
scanf("s", &pwd);
}
printf("请问您是否需要修改用户名?\n");
printf("需要请输入1,不需要请输入2");
scanf("%d", &xz);
if (xz == 1) {
printf("请输入新的用户名");
scanf("%s", &per[0].name);
} else if (xz == 2) {
}
}
int main() {
do {
//程序一开始就进入欢迎界面
welcome();
//选择登录进入程序的方式
int xh;
printf("请选择登录方式");
scanf("%d", &xh);
if (xh == 1) {
//管理员的菜单功能
while (1) {
int sf = denglu();
if (sf == 0) {
}
printf("欢迎管理员登录\n");
manager();
int cd;
scanf("%d", &cd);
if (cd == 1) {
putbook();
break;
} else if (cd == 2) {
DeleteBook();
} else if (cd == 3) {
Showbook();
} else if (cd == 4) {
updata();
} else if (cd == 5) {
sort(book, n);
} else if (cd == 6) {
//返回上一级菜单
break;
}
}
} else if (xh == 2) {
//普通用户菜单界面
while (1) {
int sf = denglu();
if (sf == 0) {
}
printf("欢迎用户%s登录\n", &per[0].name);
comview();
int cxh;
scanf("%d", &cxh);
if (cxh == 1) {
Showbook();
} else if (cxh == 2) {
lendbook();
} else if (cxh == 3) {
huanbook();
} else if (cxh == 4) {
xiugaimima();
break;
} else if (cxh == 6) {
//返回上一级菜单界面
break;
}
}
} else if (xh == 3) {
zhuce();
printf("注册成功\n");
} else if (xh == 4) {
break;
}
} while (1);
return 0;
}
```
book[i]=book[i+1]不能直接这么用,结构体类型的数组不能直接赋值的,需要用到memcpy指令,比如:
memcpy(&book[i],&book[i+1],sizeof(Book));
sort函数调用 ,需要传入 book数组 和 一个整数 n
sort(books, n); // books 为数组名, n 为数组的长度
指令 | 描述 |
---|---|
#include | 它是C语言中的头文件命令,用于指定头文件嵌入源文件中。 |
#define | 宏定义。 |
#undef | 宏定义的终止符,用于取消已定义的宏。 |
#ifdef | 如果宏已定义则返回真。 |
#ifndf | 如果宏没有定义则返回真。 |
#if | 如果条件语句成立,则编译运行下面的代码。 |
#else | 与#if一起使用,如果#if条件不成立,则执行下面的代码。 |
#elif | 与#if一起使用,如果#if条件不成立,当前条件成立,则执行下面的代码。 |
#endif | 结束一个 #if……#else 条件编译块。 |
#error | 当遇到标准错误时,输出错误消息。 |
#pragma | 使用标准化方法,向编译器发布特殊的命令到编译器中。 |