#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define BOOKSIZE 2048
#define STUSIZE 1024
int gBookIndex = 0; //用于书本数组的下标
int gStuIndex = 0; //用于学生数组的下标
struct Book
{
char book_name[32];
char book_author[32];
int borrow_flag;
int book_count;
};
typedef struct Book book;
struct Student
{
char name[32];
char id[32];
char *booknum[5];
int count;
};
typedef struct Student stu;
book *gBookInfo[BOOKSIZE] = {0}; //结构体指针数组,存放各个结构体的首地址。
stu *gStuInfo[STUSIZE] = {0}; //结构体指针数组
void InitLibrary() //初始化(三本书)
{
gBookInfo[gBookIndex] = (book *)malloc(sizeof(book) * 1);
if (NULL == gBookInfo[gBookIndex])
{
printf("malloc failure!\n");
}
strcpy(gBookInfo[gBookIndex]->book_name, "aaaa");
strcpy(gBookInfo[gBookIndex]->book_author, "jack");
gBookInfo[gBookIndex]->book_count = 5;
gBookInfo[gBookIndex]->borrow_flag = 1;
gBookIndex++;
gBookInfo[gBookIndex] = (book *)malloc(sizeof(book) * 1);
if (NULL == gBookInfo[gBookIndex])
{
printf("malloc failure!\n");
}
strcpy(gBookInfo[gBookIndex]->book_name, "bbbb");
strcpy(gBookInfo[gBookIndex]->book_author, "jack");
gBookInfo[gBookIndex]->book_count = 3;
gBookInfo[gBookIndex]->borrow_flag = 1;
gBookIndex++;
gBookInfo[gBookIndex] = (book *)malloc(sizeof(book) * 1);
if (NULL == gBookInfo[gBookIndex])
{
printf("malloc failure!\n");
}
//strcpy(gBookInfo[gBookIndex]->book_name,
strcpy(gBookInfo[gBookIndex]->book_name, "cccccccccccccc");
strcpy(gBookInfo[gBookIndex]->book_author, "jack");
gBookInfo[gBookIndex]->book_count = 2;
gBookInfo[gBookIndex]->borrow_flag = 1;
gBookIndex++;
}
char *func[] = {"1、增加图书 2、查看图书"
"3、删除图书 4、修改图书,
"5、借书 6、还书
"7、借书情况 8、退出系统"};
void menu()
{
int i;
for (i = 0; i < sizeof(func) / sizeof(func[0]); i++) //输出菜单界面
{
printf("%s\n", func[i]);
}
}
void AddBook()
{
char name[32] = {0};
char author[32] = {0};
int count = 0;
int flag = 0;
printf("请输入图书的名字、作者、本数、是否可借(1\0)\n");
scanf("%s%s%d%d", name, author, &count, &flag);
gBookInfo[gBookIndex] = (book *)malloc(sizeof(book) * 1);
strcpy(gBookInfo[gBookIndex]->book_name, name);
strcpy(gBookInfo[gBookIndex]->book_author, author);
gBookInfo[gBookIndex]->book_count = count;
gBookInfo[gBookIndex]->borrow_flag = flag;
gBookIndex++;
printf("图书录入成功!\n");
}
void ShowBook()
{
char *book_info[] = {"书名","作者","本数","是否可借"};
int i;
printf("%-20s %-20s %-20s %-20s\n", book_info[0], book_info[1], book_info[2], book_info[3]);
for (i = 0; i < gBookIndex; i++)
{
printf("%-20s %-20s %-20d %-20d\n", gBookInfo[i]->book_name, gBookInfo[i]->book_author,
gBookInfo[i]->book_count, gBookInfo[i]->borrow_flag);
}
sleep(1); //执行挂起1秒
}
void BorrowBook()
{
char name[32] = {0};
char id[32] = {0};
char book_name[32] = {0};
printf("请输入姓名\n");
scanf("%s", name);
int i, j; //遍历数组,判断该学生是否借过书
for (i = 0; i < gStuIndex; i++)
{
if (strcmp(gStuInfo[i]->name, name) == 0) //匹配,曾借过书
{
if (gStuInfo[i]->count >= 5) //一个人最多借5本
{
printf("可借数目已经达到上限,无法借出\n");
return;
}
else //借过书,但不够五本
{
printf("您之前借过书,请输入书名\n");
scanf("%s", book_name);
for (j = 0; j < gBookIndex; j++)//判断书是否可借
{
if (strcmp(gBookInfo[j]->book_name, book_name) == 0)
{
if (gBookInfo[j]->borrow_flag == 0)
{
printf("剩余0本,不可借\n");
return;
}
else
{
break;
}
}
if (j == gBookIndex - 1)
{
printf("书名不存在\n");
return;
}
}
gBookInfo[j]->book_count--; //被借了一本,就少了一本
if(gBookInfo[j]->book_count == 0)
{
gBookInfo[j]->borrow_flag = 0;
}
int k;
for(k=0;k<gStuInfo[i]->count+1;k++)
{
if(gStuInfo[i]->booknum[k] == 0) //
{
gStuInfo[i]->booknum[k] = (char *)malloc(sizeof(char) * 1);
strcpy(gStuInfo[i]->booknum[k],book_name);
}
}
gStuInfo[i]->count++;
printf("借书成功\n");
return;
}
}
printf("\n");
}
//如果遍历数组结束,没有匹配到,说明没有借过书
printf("您之前没有借过书,请输入学号、书名\n");
scanf("%s%s", id, book_name);
for (i = 0; i < gBookIndex; i++) //判断书本存不存在
{
if (strcmp(gBookInfo[i]->book_name, book_name) == 0)
{
if (gBookInfo[i]->borrow_flag == 0)
{
printf("书本不可借\n");
return;
}
else
{
gBookInfo[i]->book_count--; //减少一本
if(gBookInfo[i]->book_count == 0)
{
gBookInfo[i]->borrow_flag = 0;
}
break;
}
}
if (i == gBookIndex - 1)
{
printf("书名不存在\n");
return;
}
}
gStuInfo[gStuIndex] = (stu *)malloc(sizeof(stu) * 1); //录入借书学生的信息
int count0;
for(count0=0;count0<5;count0++)
{
gStuInfo[gStuIndex]->booknum[count0] = 0;
}
gStuInfo[gStuIndex]->booknum[0] = (char *)malloc(sizeof(char) * 1);
gStuInfo[gStuIndex]->count = 0;
strcpy(gStuInfo[gStuIndex]->name, name);
strcpy(gStuInfo[gStuIndex]->id, id);
strcpy(gStuInfo[gStuIndex]->booknum[0], book_name);
gStuInfo[gStuIndex]->count++;
gStuIndex++;
printf("%d\n",gStuIndex);
printf("借书成功\n");
printf("\n");
}
void back()
{
if( 0 == gStuIndex )
{
printf("暂时无学生借书\n");
}
else
{
printf("请输入姓名:");
char name[32];
scanf("%s",name);
int i,j,k;
for (i = 0; i < gStuIndex; i++)
{
if (strcmp(gStuInfo[i]->name, name) == 0) //匹配,曾经借过书 {
printf("请输入书名:");
char book_name[32];
scanf("%s",book_name);
for (j = 0; j < gBookIndex; j++) //判断书本是否存在
{
if (strcmp(gBookInfo[j]->book_name, book_name) == 0)
{
for(k=0;k<gStuInfo[i]->count;k++)
{
if(strcmp(gStuInfo[i]->booknum[k],book_name) == 0)
{
gStuInfo[i]->booknum[k]=0;
free(gStuInfo[i]->booknum[k]);
break;
}
}
gStuInfo[i]->count--;
gBookInfo[j]->book_count++;
printf("还书成功\n");
break;
}
if( j == gBookIndex-1 )
{
printf("书名输入错误,请重新输入\n");
}
}
int t;
}
}
}
printf("\n");
}
void change()
{
printf("输入所要修改的书名:");
char bookname1[32];
scanf("%s",bookname1);
int num,flag;
char bookname[32];
char author[32];
int i,j;
for (i = 0; i < gBookIndex; i++)
{
if (strcmp(gBookInfo[i]->book_name, bookname1) == 0)
{
printf("修改书名输入1,修改作者输入2,修改本数输入3,修改可借状态输入4\n");
printf("请输入(1/2/3/4):");
scanf("%d",&j);
if(1 == j)
{
printf("请输入修改后的作者:");
scanf("%s",bookname);
strcpy(gBookInfo[i]->book_name, bookname );
printf("修改成功\n");
}
else if(2 == j)
{
printf("请输入修改后的本数:");
scanf("%s",author);
strcpy(gBookInfo[i]->book_author,author );
printf("修改成功\n");
}
else if( 3 == j )
{
printf("请输入修改后的本数:");
scanf("%d",&num);
gBookInfo[i]->book_count = num;
printf("修改成功\n");
}
else if( 4 == j )
{
printf("请输入修改后的可借状态");
scanf("%d",&flag);
if( flag == 0 || flag == 1 )
{
gBookInfo[i]->borrow_flag = flag;
printf("修改成功\n");
}
else
printf("输入错误\n");
}
else
{
printf("输入错误\n");
}
break;
}
if( i == gBookIndex-1 )
{
printf("书名输入错误\n");
}
}
printf("\n");
}
void delet()
{
int i,j;
char bookname[32]={0};
printf("请输入要删除的书名:");
scanf("%s",bookname);
for (i = 0; i < gBookIndex; i++)
{
if (strcmp(gBookInfo[i]->book_name, bookname) == 0)
{
for(j=i;j<gBookIndex-1;j++)
{
strcpy(gBookInfo[j]->book_name,gBookInfo[j+1]->book_name);
strcpy(gBookInfo[j]->book_author,gBookInfo[j+1]->book_author);
gBookInfo[j]->borrow_flag=gBookInfo[j+1]->borrow_flag;
gBookInfo[j]->book_count=gBookInfo[j+1]->book_count;
}
free(gBookInfo[gBookIndex]);
gBookInfo[gBookIndex]=NULL;
gBookIndex--;
printf("删除成功\n");
break;
}
if( i == gBookIndex-1 )
{
printf("书名输入错误\n");
}
}
printf("\n");
}
void borrowstate()
{
printf("共有%d的人借了书\n",gStuIndex);
printf("\n");
if(gStuIndex == 0)
{
printf("\n");
}
else
{
char *borrow_info[4] = {"姓名“,"学号","借书本数","书名"”};
printf("%-20s %-20s %-20s %-20s\n", borrow_info[0], borrow_info[1], borrow_info[2], borrow_info[3]);
int i,j;
for(i=0;i<gStuIndex;i++)
{
printf("%-20s %-20s %-10d ",gStuInfo[i]->name,gStuInfo[i]->id,gStuInfo[i]->count);
for(j=0;j<gStuInfo[i]->count;j++)
{
printf("%s ",gStuInfo[i]->booknum[j]);
}
printf("\n");
}
printf("\n");
}
}
int main()
{
InitLibrary();
int choice;
system("clear"); //清屏
while (1)
{
menu();
scanf("%d", &choice);
switch(choice)
{
case 1: //增加图书
AddBook();
break;
case 2: //查看图书
ShowBook();
break;
case 3:
delet();//删除图书
break;
case 4:
change();//借书
break;
case 5: //还书
BorrowBook();
break;
case 6:
back();//杩樹功
break;
case 7:
borrowstate();//借书情况
break;
case 8:
exit(0); //退出整个代码
break;
}
}
return 0;
}
linux c练习 图书管理系统
最新推荐文章于 2024-01-29 13:15:38 发布