在做这个课设之前本来是打算用easyx写的 但是最后发觉easyx+链表的写法 对自己而言等于写不来
所以最后还是花了一个晚上写了个黑白类型的(因为时间比较赶所以还是调用了很多别人直接的框架,将就看吧)
yd.h
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#pragma warning(disable:4996)//可以利用该代码消去警告类
#define Max 2 //定义最多能借几本书的宏定义
#define NEW1 (book *)malloc(sizeof(book))
#define NEW2 (RD*)malloc(sizeof(RD))
//---------------------------------------------------三个结构体变量定义----------------------------------------
typedef struct book {
char book_num[10];//图书编号???
char book_name[20];//图书名称?
char book_writer[10];//图书的作者?
int book_xkc;//现有量
int book_zkc;//库存
int n;
struct book *next;
}book;
typedef struct borrow
{
char jy_num[10];//借书的总数
char limit_date[40];//还书日期 防止溢出的问题
}BO;
typedef struct reader
{
char reader_num[10];
char reader_name[10];
int right;//读者所借的书的本数
int m;
BO brrow[Max];
struct reader *next;
}RD;
//----------------------------------------------------------函数声明-------------------------------------------
//-------界面函数
void Login();
void login1();
int Menu();
void Menu_select();
//-------初始化函数
void cshead_book();
void save1();
void Save();
void Save_Book();
void Save_Reader();
void Load();
void Load_Reader();
void Load_Book();
//--------5个功能函数
void rk();
void ck();
void add_reader();
void Print_reader();
void Print_book();
void jy();
void gh();
jm.cpp
void Login()
{
system("cls");
printf(" ———————————— 欢迎进入图书管理系统 ———————————\n");
printf(" ┏━━━━━━━━━━━━━━━━━━┓\n");
printf(" ┃ ┃\n");
printf(" ┃ 190207233 ┃\n");
printf(" ┃ 王加金 ┃\n");
printf(" ┃ ┃\n");
printf(" ┗━━━━━━━━━━━━━━━━━━┛\n");
printf(" → 按任意键进入系统:");
getchar();
system("cls");
}
int Menu()//选择功能函数的函数
{
int xz;
printf(" ◢━━━━━━━━━━━◣\n");
printf(" ┃#欢迎使用图书管理系统#┃\n");
printf(" ◥━━━━━━━━━━━◤\n");
printf(" ┌──────────────┐ \n");
printf(" │ ① 采编入库 ----- (ADD) # │ \n");
printf(" ├──────────────┤ \n");
printf(" │ ② 书籍出库 ----- (SEA) # │ \n");
printf(" ├──────────────┤ \n");
printf(" │ ③ 登记读者 ----- (SEA) # │ \n");
printf(" ├──────────────┤ \n");
printf(" │ ④ 借阅登记 ----- (SEA) # │ \n");
printf(" ├──────────────┤ \n");
printf(" │ ⑤ 还书管理 ----- (SEA) # │ \n");
printf(" ├──────────────┤ \n");
printf(" │ ⑥查询图书信息 (SEA) # │ \n");
printf(" ├──────────────┤ \n");
printf(" │ ⑦ 查询读者信息 (SEA) # │ \n");
printf(" │ 0. 退 出 ----- (ESC) # │ \n");
printf(" └──────────────┘ \n");
printf(" →请在此输入您的选择:");
for (;;)
{
scanf("%d", &xz);
if (xz < 0 || xz>7)
{
printf("错误!请重新输入:\n");
}
else
break;
}
return xz;
}
void Menu_select()
{
for (;;)
{
switch (Menu())
{
system("cls");
case 0:save1();
case 1:rk(); break;
case 2:ck(); break;
case 3:add_reader(); break;
case 4:jy(); break;
case 5:gh(); break;
case 6:Print_book(); break;
case 7:Print_reader(); break;
default:printf("错误!"); exit(0);
}
}
}
gn.cpp
book *head_book;
RD *head_reader;
int n=0,m=0;
//------------------------------------------------------初始化模块-------------------
void cshead_book()
{
book *p0;
printf("\n\n\t\t\t\t图书初始化开始\n");
p0 = NEW1;
head_book = p0;
printf("\t\t\t\t请输入图书信息:\n");
printf("\t\t\t\t图书编号,图书名称,图书作者,图书数量\n");
scanf("%s%s%s%d", p0->book_num, p0->book_name, p0->book_writer, &p0->book_zkc);
p0->book_xkc = p0->book_zkc;
p0->next = NULL;
p0->n=++n;
printf("\t\t\t\t图书信息初始化完毕!\n");
getchar();
system("cls");
}
void save1()
{
system("cls");
Save();
printf("\n\n\t欢迎下次使用本系统!\n");
getchar();
exit(0);
}
//--------------------------------------保存于加载函数功能---------------------------------------
void login1()
{
FILE *fp_book, *fp_reader;
Login();
if ((fp_book = fopen("book.txt", "r+")) == NULL || (fp_reader = fopen("reader.txt", "r+")) == NULL)
{
cshead_book();
}
else
Load();
}
void Save()
{
Save_Reader();
Save_Book();
}
void Save_Reader()
{
FILE *fp_reader;
RD *p, *p0;
p = head_reader;
if ((fp_reader = fopen("reader.txt", "w+")) == NULL)
{
printf("\n文件保存失败!\n");
exit(0);
}
while (p != NULL)
{
if ((fwrite(p, sizeof(RD), 1, fp_reader)) != 1)
{
printf("\n写入文件失败!\n");
}
p0 = p;
p = p->next;
free(p0);
}
head_reader = NULL;
fclose(fp_reader);
}
void Save_Book()
{
FILE *fp_book;
book *p, *p0;
p = head_book;
if ((fp_book = fopen("book.txt", "w+")) == NULL)
{
printf("\n文件保存失败!\n");
exit(0);
}
while (p != NULL)
{
if ((fwrite(p, sizeof(book), 1, fp_book)) != 1)
{
printf("\n写入文件失败!");
}
//如果把这个放在里面就无限循环做成了木马
p0 = p;
p = p->next;
free(p0);
}
head_book = NULL;
fclose(fp_book);
}
void Load()
{
Load_Reader();
Load_Book();
}
void Load_Reader()
{
RD *p1, *p2, *p3;
FILE *fp;
fp = fopen("book.txt", "r+");
p1 = NEW2;
fread(p1, sizeof(RD), 1, fp);
head_reader = p3 = p2 = p1;
while (!feof(fp))//检验文件读取是否结束
{
p1 = NEW2;
fread(p1, sizeof(RD), 1, fp);
p2->next = p1;
p3 = p2;
p2 = p1;
}
p3->next = NULL;
free(p1);
fclose(fp);
}
void Load_Book()
{
book *p1, *p2, *p3;
FILE *fp;
fp = fopen("book.txt", "rb");
p1 = NEW1;
fread(p1, sizeof(book), 1, fp);
head_book = p3 = p2 = p1;
while (!feof(fp))
{
p1 = NEW1;
fread(p1, sizeof(book), 1, fp);
p2->next = p1;
p3 = p2;
p2 = p1;
}
p3->next = NULL;
free(p1);
fclose(fp);
}
//----------------------------------------------------------------功能实现函数-----------------------------
void rk()
{
book *p, *p0, *p1;
p = p1 = head_book;
printf("\n新书入库模块\n");
printf("\n请输入入库书籍信息\n");
p0 = NEW1;
printf("图书编号:");
scanf("%s", p0->book_num);
while (strcmp(p0->book_num, p1->book_num) != 0 && p1->next != NULL)//判断头结点是否为空与是否与新入书籍编号相同
p1 = p1->next;
if (strcmp(p0->book_num, p1->book_num) == 0)
{
printf("此编号图书已经存在!直接添加数量!\n");
printf("输入添加数量");
scanf("%d", &p0->book_zkc);
p1->book_zkc += p0->book_zkc;
p1->book_xkc += p0->book_zkc;
}
else
{
printf("请输入图书名称,图书作者,图书数量\n");
scanf("%s%s%d", p0->book_name, p0->book_writer, &p0->book_zkc);
while (p->next)
{
p = p->next;
if (head_book = NULL)
head_book = p0;
else
p->next = p0;
p0->next = NULL;
p0->book_xkc = p0->book_zkc;
p0->n=++n;
}
}
printf("新书入库完毕!\n");
getchar();
}
void ck()
{
book *p, *p0, *p1,*p2;
p = p1 = head_book;
printf("\n书籍出库模块\n");
printf("\n请输入出库书籍信息\n");
p0 = NEW1;
p2 = NEW1;
printf("图书编号:");
scanf("%s", p0->book_num);
while (strcmp(p0->book_num, p1->book_num) != 0 && p1->next != NULL)//判断头结点是否为空与是否与新入书籍编号相同-->直到遍历完
p1 = p1->next;
if ((strcmp(p0->book_num, p1->book_num)) == 0)//即如果找到这本书籍
{
p2->next = p1->next;
p1 = p2->next;
free(p2);
printf("\n删除书籍成功\n");
}
else
{
printf("\n不存在该书籍\n");
}
}
void add_reader()
{
RD *p0;
int i;
printf("读者初始化开始,请输入读者信息\n");
p0 = NEW2;
head_reader = p0;
printf("\n 请输入读者的编号,读者姓名,\n");
scanf("%s%s", p0->reader_num, p0->reader_name);
p0->right = 0;
for (i = 0; i < Max; i++)
{
strcpy(p0->brrow[i].jy_num, "0");
strcpy(p0->brrow[i].limit_date, "0");
}
p0->next = NULL;
p0->m=++m;
printf("读者信息初始化完毕!\n");
getchar();
}
void jy()
{
book *p0;
RD *p1;
char bo_num[10], rea_num[10], lim_date[20];
int i;
p0 = head_book;
p1 = head_reader;
printf("\n 借书模块\n");
printf("\n输入要借阅书籍的读者编号\n");
scanf("%s", rea_num);
while (p1->next != NULL && strcmp(rea_num, p1->reader_num) != 0)
{
p1 = p1->next;
}
if (p1->next == NULL && strcmp(rea_num, p1->reader_num) != 0)
{
printf("此读者编号不存在!\n");
getchar();
}
printf("请输入你要借书的编号");
scanf("%s", bo_num);
while (strcmp(bo_num, p0->book_num) != 0 && p0->next != NULL)
{
p0 = p0->next;
}
if (p0->next == NULL && strcmp(bo_num, p0->book_num) != 0)
{
printf("此图书编号不存在!\n");
}
else
if (p0->book_xkc <= 0)
{
printf("抱歉,此书已借完!");
}
else
if (p1->right >= Max)
{
printf("您的借书数目已满!不能借书!\n");
}
else
if (strcmp(p1->brrow[0].jy_num, "0") != 0)
{
for (i = 0; i < Max; i++)
{
if (strcmp(p1->brrow[i].jy_num, bo_num) == 0)
{
printf("抱歉!同一个读者不能借阅两本相同的书!\n");
}
else
if (strcmp(p1->brrow[i].jy_num, "0") == 0)
{
printf("请输入你要归还书的日期:");
scanf("%s", lim_date);
strcpy(p1->brrow[p1->right++].jy_num, bo_num);
strcpy(p1->brrow[p1->right - 1].limit_date, lim_date);
p0->book_xkc--;
printf("读者编号%s借书完毕!", p1->reader_num);
}
}
}
else
{
printf("请输入你要归还图书的日期:");
scanf("%s", lim_date);
strcpy(p1->brrow[p1->right++].jy_num, bo_num);
strcpy(p1->brrow[p1->right - 1].limit_date, lim_date);
p0->book_xkc--;
printf("读者编号%s借书完毕!\n", p1->reader_num);
}
}
void gh()
{
book *p; RD *q;
int i, j, zd = 0;
char gh_num[10], return_reader_num[10];
p = head_book;
q = head_reader;
printf("\n还书模块\n");
printf("\n请输入要还书的读者编号:");
scanf("%s", return_reader_num);
while (q->next != NULL && strcmp(return_reader_num, q->reader_num) != 0)
{
q = q->next;
}
if (q->next == NULL && strcmp(return_reader_num, q->reader_num) != 0)
{
zd = 2;
printf("此读者编号不存在!\n");
getchar();
}
printf("\n请输入读者还书的编号:");
scanf("%s", gh_num);
while (p->next != NULL && strcmp(gh_num, p->book_num) != 0)
{
p = p->next;
}
if (p->next == NULL && strcmp(gh_num, p->book_num) != 0)
{
zd = 2;
printf("此图书编号不存在!\n");
goto end;
}
for (i = 0; i < Max; i++)
{
if ((strcmp(gh_num, q->brrow[i].jy_num)) == 0)
{
zd = 1;
for (j = 0; j <= Max - 1; j++)
{
strcpy(q->brrow[j].jy_num, q->brrow[j + 1].jy_num);
strcpy(q->brrow[j].limit_date, q->brrow[j + 1].limit_date);
}
strcpy(q->brrow[Max - 1].jy_num, "0");
strcpy(q->brrow[Max - 1].limit_date, "0");
p->book_xkc++;
q->right--;
printf("编号%s的读者还书完毕!", return_reader_num);
}
}
if (find == 0)
{
printf("错误!此读者未借此书!\n");
}
}
void Print_book()
{
book *p;
p = head_book;
printf("\n图书信息如下\n\n");
while(p!=NULL)
{
printf("%s\t\t%s\t\t%s\t\t%d\t%d\n",p->book_num,p->book_name,p->book_writer,p->book_xkc,p->book_zkc);
p=p->next;
}
printf("\n图书信息打印完毕!");
getchar();
}
void Print_reader()
{
RD *p;
int i,j;
char num[10];
p = head_reader;
printf("\n请输入查询的读者编号\n\n");
scanf("%s",e);
for(j=0;j<m;j++)
{
if(strcmp(p->reader_num,num)==0)
{
printf("\n 读者信息如下:\n\n");
printf("\n 读者书证号\t读者姓名\n\n");
printf("%s\t\t%s",p->reader_num,p->reader_name);
for(i=0;i<Max;i++)
{
printf("\n");
printf("图书编号",i+1);
printf("\t 还书日期",i+1);
printf("\n");
printf("\t%s",p->brrow[i].jy_num);
printf("\t\t%s",p->brrow[i].limit_date);
}
printf("\n");
break;
}
else
p=p->next;
}
printf("\n读者信息打印完毕!");
getchar();
}
main.cpp
int main()
{
system("color 74");
login1();
Menu_select();
return 0;
}
最后 如果要做什么课设类的
欢迎私聊联系博主