700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > c语言项目实践--图书馆管理系统

c语言项目实践--图书馆管理系统

时间:2021-08-18 02:55:52

相关推荐

c语言项目实践--图书馆管理系统

一、目的与要求

1、目的:

(1)要求学生达到熟练掌握C++语言的基本知识和技能;

(2)基本掌握面向对象程序设计的基本思路和方法;

(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。

2、基本要求:

(1)要求利用面向对象的方法以及C++的编程思想来完成系统的设计;

(2)要求在设计的过程中,建立清晰的类层次;要分析和定义各个类,每个类中要有各自的属性和方法;要求运用面向对象的机制(继承、派生及多态性)来实现系统功能。

(3)在系统的设计中,要有清晰的界面设计,同时采用文件进行读写操作。

3、创新要求: 在基本要求达到后,可进行创新设计。

二、问题描述及其功能要求

建立一个图书馆管理系统,可以处理以下对象:⑴ 图书馆基本信息。⑵ 图书馆的书籍。⑶ 图书馆管理员 。⑷ 读者信息。

程序要完成下列功能:

⑴ 查询图书馆的总信息。⑵ 查询图书馆管理员的信息。⑶ 查询图书馆藏书信息。

⑷ 存入新书(有管理员加入,需进行身份验证)。⑸ 旧书处理。⑹ 存入新的管理员的信息。⑺ 修改管理员信息(增加工龄,加薪)。⑻ 两所图书馆的最大藏书量之和。

⑼ 根据书名检索书刊信息。⑽ 查询读者的借阅信息。⑾ 查询读者信息(包括借书情况、到期时间、罚款情况。)。⑿ 管理员可以修改用户的欠款和交款的金额。

⒀ 读者分为学生、研究生和教师。学生的租期为1个月,教师的租期为2个月。

三、源代码

main.c

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <conio.h>/*getch()函数使用的头文件*/#include <windows.h> /*Sleep()函数使用的头文件*/#include <string.h> /*strcmp()函数使用的头文件*/#include"Lib.h"void ShowMainMenu(){system("cls");printf("\n\n\n\n\n");printf("\t|----------------------欢迎进入---------------------------\n");printf("\t|读者管理系统\n");printf("\t| 1、查询图书馆的总信息\n");printf("\t| 2、查询图书馆管理员的信息 \n");printf("\t| 3、查询图书馆藏书信息\n");printf("\t| 4、存入新书 \n");printf("\t| 5、旧书处理 \n");printf("\t| 6、存入新的管理员的信息 \n");printf("\t| 7、修改管理员信息 \n");printf("\t| 8、两所图书馆的最大藏书量之和 \n");printf("\t| 9、根据书名检索书刊信息 \n");printf("\t| 10、查询读者的借阅信息\n");printf("\t| 11、查询读者信息\n");printf("\t| 12、管理员可以修改用户的欠款和交款的金额\n"); printf("\t| 13、读者借书 \n");printf("\t| 14、读者还书 \n");printf("\t| 15、读者交费 \n");printf("\t| 0、退出 \n");printf("\t|---------------------------------------------------------\n");printf("新打开程序需先添加管理员\n");printf("\n");printf("\t\t请选择(0-15):");}int main(){Book* book = NULL; //定义一个Book*类型的结点 来充当头节点 为什么赋值NULL, 这个book指针并没有分配内存,防止野指针,为了安全赋值NULL;//什么时候给他赋值;第一次创建book结点的时候Reader* reader = NULL;Manger* manger = NULL; //名字为manger的链表 的首结点 也就是第一个结点 的指针 这个指针 manger 指向链表中第一个结点int iItem;ShowMainMenu();/*调用ShowMainMenu函数绘制界面*/scanf("%d", &iItem);/*提示用户输入数字*/getchar();while (1){switch (iItem){case 1:ShowLibInfo(book, reader, manger);break;case 2:foundManger(manger);break;case 3:ShowLibBook(book);break;case 4:book=AddBook(book,manger);break;case 5:book=DealoldBook(book);break;case 6:manger=AddManger(manger); // 返回一个manger的指针 赋值给 manger链表的首结点 ,那么首结点就分配内存了break;case 7:ModManger(manger);break;case 8:AddTowLib();break;case 9:foundBook(book);break;case 10:foundReader_Info(reader);break;case 11:foundReaderInfo(reader);break;case 12:ModReaderBlance(manger ,reader);break;case 13:reader=LendBook(reader,book);break;case 14:returnBook(reader, book);break;case 15:rachage(manger,reader);break;default:printf("\t输入有误,请重新输入!\n");Sleep(2000);}ShowMainMenu();/*调用ShowMainMenu函数绘制界面*/scanf("%d", &iItem);/*提示用户输入数字*/getchar();}return 0;}

Lib.h

#pragma once/*图书结构体:图书编号,图书名,图书作者,出版社,库存量*/typedef struct Book{int iNum;char acName[15];char acAuthor[15];char acPress[15];int iAmount;struct Book* next;struct Book* tial;}Book;/*读者:读者编号,读者姓名,性别,可借书数,读者已借书的编号*/typedef struct Reader{int iNum;char acName[15];char acSex[4];char position[20];int iMax; //Student 20本 teacher 40本int iAmount;int aiBookId[100];int balance;int day;struct Reader* next;}Reader;typedef struct Manger{int id;char name[20];int password;char gender[3];int salary;struct Manger* next;}Manger;void ShowLibInfo(const Book*book, const Reader*reader, const Manger*manger);void foundManger(Manger* manger);void ShowLibBook(Book* book);Book* AddBook(Book* book, Manger* manger);Book* DealoldBook(Book* book);Manger* AddManger(Manger* manger);void ModManger(Manger* manger);void AddTowLib();void foundBook(Book* book);void foundReader_Info(Reader* reader);void foundReaderInfo(Reader* reader);void ModReaderBlance(Manger* manger, Reader* reader);Reader* LendBook(Reader* reader, Book* book);void returnBook(Reader* reader,Book* book);void rachage(Manger* manger,Reader* reader);

Lib.c

#define _CRT_SECURE_NO_WARNINGS#pragma once#include"Lib.h"#include<assert.h>#include<stdio.h>void ShowLibInfo(const Book* book1, const Reader* reader1, const Manger* manger1){Book* book = book1;Reader* reader = reader1;Manger* manger = manger1;int bookNUm = 0, readerNUm = 0, mangerNUm = 0;while (book != NULL){bookNUm++;book = book->next;}while (reader != NULL){readerNUm++;reader = reader->next;}while (manger != NULL){mangerNUm++;manger = manger->next;}printf("本图书馆共有藏书%d本,读者%d人,管理员%d人\n", bookNUm, readerNUm, mangerNUm);printf("按任意键返回\n");getchar();return;}void foundManger(Manger* manger1){Manger* manger = manger1;int id;printf("输入要查找的管理员编号:");scanf("%d", &id);getchar();while (manger != NULL){if (id == manger->id){printf("已找到,信息如下:\n");printf("%d\t%s\t%s\t%d", manger->id, manger->name, manger->gender, manger->salary);printf("\n按任意键返回\n");getchar();return;}manger = manger->next;}printf("没有此管理员\n");printf("按任意键返回\n");getchar();return;}void ShowLibBook(Book* book1){Book* book = book1;while (book != NULL){ // \t :制表符printf("%d\t%s\t%s\t%s\t%d\n", book->iNum, book->acName, book->acAuthor, book->acPress, book->iAmount);book = book->next;}printf("\n按任意键返回\n");getchar();return;}Book* AddBook(Book* book1, Manger* manger1){Book* book = book1;Manger* manger = manger1;printf("请输入管理员Id:");int id;scanf("%d", &id);getchar();while (manger != NULL){if (id == manger->id){printf("输入管理员密码:");int pass;scanf("%d", &pass);getchar();if (book == NULL){if (pass == manger->password){Book* tmp = (Book*)malloc(sizeof(Book));tmp->next = NULL;assert(tmp);printf("输入书的编号:");scanf("%d", &tmp->iNum);getchar();printf("输入书的名称:");gets(&tmp->acName);printf("输入书的作者:");gets(tmp->acAuthor);printf("输入书的出版社:");gets(tmp->acPress);printf("输入书的库存量:");scanf("%d", &tmp->iAmount);book = tmp;printf("按任意键返回\n");getchar();return book;}printf("密码错误!\n");printf("按任意键返回\n");getchar();return;}if (pass == manger->password){while (1){while (book->next == NULL){int flag = 1;while (flag){Book* tmp = (Book*)malloc(sizeof(Book));tmp->next = NULL;assert(tmp);printf("输入书的编号:");scanf("%d", &tmp->iNum);getchar();printf("输入书的名称:");gets(&tmp->acName);printf("输入书的作者:");gets(tmp->acAuthor);printf("输入书的出版社:");gets(tmp->acPress);printf("输入书的库存量:");scanf("%d", &tmp->iAmount);book->next = tmp;printf("是否继续输入:1==>继续\t0==>结束\t");scanf("%d", &flag);getchar();if (flag == 0){printf("按任意键返回\n");getchar();return book1;}}}book = book->next;}}printf("密码错误!\n");printf("按任意键返回\n");getchar();return book1;}manger = manger->next;}printf("没有找到该管理员");printf("按任意键返回\n");getchar();return;}Book* DealoldBook(Book* book1){Book* book = book1;Book* prev = book1;printf("输入要处理旧书的编号:");int id;scanf("%d", &id);getchar();while (book != NULL){if (id == book->iNum){if (book1 == book){book = book->next;free(prev);return book;}prev->next = book->next;free(book); // free():释放资源printf("已将旧书处理掉!\n");printf("按任意键返回\n");getchar();return book1;}prev = book;book = book->next;}printf("没有找到该图书\n");printf("按任意键返回\n");getchar();return book1;}Manger* AddManger(Manger* manger1)//形参,是manger链表的指针或地址{Manger* manger = manger1; //while (1){if (manger == NULL){Manger* tmp = (Manger*)malloc(sizeof(Manger)); //动态内存分配: 开辟一个 Manger类型大小的空间 返回一个 Manger*类型的指针if (tmp == NULL){printf("erro\n");return NULL;}tmp->next = NULL;printf("输入管理员id:");scanf("%d", &tmp->id);getchar();printf("输入管理员姓名:");gets(&tmp->name);/*scanf("%d", &tmp->name);getchar();*/printf("输入管理员密码:");scanf("%d", &tmp->password);getchar();printf("输入管理员性别:");gets(tmp->gender);printf("输入管理员工资:");scanf("%d", &tmp->salary);getchar();manger= tmp;printf("按任意键返回\n");getchar();return manger;}else {while (manger->next == NULL){Manger* tmp = (Manger*)malloc(sizeof(Manger));tmp->next = NULL;printf("输入管理员id:");scanf("%d", &tmp->id);getchar(); //吸收一个字符,也就是把scanf输入时存留的回车吸收掉printf("输入管理员姓名:");gets(&tmp->name);/*scanf("%d", &tmp->name);getchar();*/printf("输入管理员密码:");scanf("%d", &tmp->password);getchar();printf("输入管理员性别:");gets(tmp->gender);printf("输入管理员工资:");scanf("%d", &tmp->salary);getchar();manger->next = tmp;printf("按任意键返回\n");getchar();return manger1;}}manger = manger->next;}}void ModManger(Manger* manger1){Manger* manger = manger1;printf("输入要修改的管理员id:");int id;scanf("%d", &id);getchar();while (manger != NULL){if (id == manger->id){printf("输入管理员id:");scanf("%d", &manger->id);getchar();printf("输入管理员姓名:");scanf("%s", &manger->name);getchar();printf("输入管理员密码:");scanf("%d", &manger->password);getchar();printf("输入管理员性别:");gets(manger->gender);printf("输入管理员工资:");scanf("%d", &manger->salary);getchar();printf("按任意键返回\n");getchar();return;}manger = manger->next;}}void AddTowLib(){}void foundBook(Book* book1){Book* book = book1;printf("输入要查找的书的id:");int id;scanf("%d", &id);getchar();while (book != NULL){if (id == book->iNum){printf("该书的信息如下:\n");printf("%d\t%s\t%s\t%s\t%d\n", book->iNum, book->acName, book->acAuthor, book->acPress, book->iAmount);printf("按任意键返回\n");getchar();return;}book = book->next;}printf("没有找到该书!\n");printf("按任意键返回\n");getchar();return;}void foundReader_Info(Reader* reader1){Reader* reader = reader1; //备份printf("输入读者的id:");int id;scanf("%d", &id);getchar();while (reader){if (id == reader->iNum){printf("借阅的书的编号如下:\n");for (int i = 0; i < reader->iMax; i++) //根据读者可以借阅的数量作为循环终止条件{if (reader->aiBookId[i] != 0) //数组里不为0,证明有一条记录,因为:数组初始化为0,并且书的编号不可能为0{printf("%d\n", reader->aiBookId[i]);}}printf("按任意键返回\n");getchar();return;}reader = reader->next; }printf("没有该读者!\n");printf("按任意键返回\n");getchar();return;}void foundReaderInfo(Reader* reader1){Reader* reader = reader1;printf("输入读者的id:");int id;scanf("%d", &id);getchar();while (reader){if (id == reader->iNum){printf("读者id:%d\n", reader->iNum);printf("读者姓名:%s\n", reader->acName);printf("读者性别:%s\n", reader->acSex);printf("读者职位:%s\n", reader->position);printf("读者已借阅书的数量:%d\n", reader->iAmount);printf("按任意键返回\n");getchar();return;}reader = reader->next;}printf("没有找到该读者\n"); printf("按任意键返回\n");getchar();return;}void ModReaderBlance(Manger* manger1, Reader* reader1){Manger* manger = manger1;Reader* reader = reader1;printf("登录管理员账号:");int id_M;scanf("%d", &id_M);getchar();while (manger){if (id_M == manger->id){printf("请输入管理员账号密码:");int passW;scanf("%d", &passW);getchar();if (passW == manger->password);{printf("登录成功!\n");printf("输入要读者的id:");int id_r;scanf("%d", &id_r);getchar();while (reader){if (id_r == reader->iNum){printf("输入修改后的金额:");int balance;scanf("%d", &balance);getchar();reader->balance = balance;printf("修改成功!\n");printf("按任意键返回\n");getchar();return;}reader = reader->next;}}printf("密码错误!\n");printf("按任意键返回\n");getchar();return;}}printf("没有该管理员\n");printf("按任意键返回\n");getchar();return;}Reader* LendBook(Reader* reader1, Book* book1){Reader* reader = reader1;Book* book = book1;Reader* prev = reader1;Reader* tmpp = reader1;printf("输入读者id:");int id;scanf("%d", &id);getchar();if (reader == NULL){Reader* tmp = (Reader*)malloc(sizeof(Reader));tmp->next = NULL;tmp->iAmount = 0;tmp->iNum = id;printf("输入读者名字:");scanf("%s", &tmp->acName);getchar();printf("输入读者性别:");scanf("%s", &tmp->acSex);getchar();printf("输入读者职位:<student\tor\tteacher>");scanf("%s", &tmp->position);getchar();if (strcmp(tmp->position, "student") == 0){tmp->iMax = 20;tmp->day = 30;}else {tmp->iMax = 40;tmp->day = 60;}for (int i = 0; i < tmp->iMax; i++){tmp->aiBookId[i] = 0;}printf("输入要借的书的编号:");int id_book;scanf("%d", &id_book);getchar();while (book != NULL){if (id_book == book->iNum){if (book->iAmount <= 1){printf("借阅失败,该图书库存不足.\n");printf("按任意键返回\n");getchar();return NULL;}if ((tmp->iAmount) + 1 > tmp->iMax){printf("借阅失败,该读者借阅图书数量已达上线.\n");printf("按任意键返回\n");getchar();return NULL;}book->iAmount--;tmp->aiBookId[tmp->iAmount] = id_book;tmp->iAmount;reader = tmp;printf("借阅成功!\n");printf("按任意键返回\n");getchar();return reader;}book = book->next;}printf("没有找到该书!\n");printf("按任意键返回\n");getchar();return reader1;}if (reader != NULL){while (reader != NULL){if (id == reader->iNum){printf("图使馆当前的书籍册:\n");ShowLibBook(book);printf("输入要借的书的编号:");int id_book;scanf("%d", &id_book);getchar();while (book != NULL){if (id_book == book->iNum){if (book->iAmount <= 1){printf("借阅失败,该图书库存不足.\n");printf("按任意键返回\n");getchar();return reader1;}if (tmpp->iAmount + 1 > tmpp->iMax){printf("借阅失败,该读者借阅图书数量已达上线.\n");printf("按任意键返回\n");getchar();return reader1;}reader->iAmount++;reader->aiBookId[tmpp->iAmount] = id_book;return reader1;}book = book->next;}printf("没有找到该书!\n");printf("按任意键返回\n");}reader = reader->next;}}}void returnBook(Reader* reader1, Book* book1){Reader* reader = reader1;Book* book = book1;printf("请输入读者的id:");int id;scanf("%d", &id);getchar();if (reader != NULL){while (reader != NULL){if (id == reader->iNum){printf("请输入要还的书的编号:");int id_book;scanf("%d", &id_book);getchar();for (int i = 0; i < reader->iMax; i++){if (reader->aiBookId[i] == id_book){reader->aiBookId[i] = 0;while (book){if (id_book == book->iNum){book->iAmount++;printf("还书成功!\n");printf("按任意键返回\n");getchar();return reader1;}book = book->next;}}}printf("没有找到该图书,检查图书的Id\n");printf("按任意键返回\n");getchar();return reader1;}reader = reader->next;}printf("没有找到该读者,检查读者id是否输入有误\n");printf("按任意键返回\n");getchar();return reader1;}}void rachage(Manger* manger1, Reader* reader1){Manger* manger = manger1;Reader* reader = reader1;printf("登录管理员账号:");int id_M;scanf("%d", &id_M);getchar();while (manger){if (id_M == manger->id){printf("请输入管理员账号密码:");int passW;scanf("%d", &passW);getchar();if (passW == manger->password);{printf("登录成功!\n");printf("输入要读者的id:");int id_r;scanf("%d", &id_r);getchar();while (reader){if (id_r == reader->iNum){printf("输入充值的金额:");int balance;scanf("%d", &balance);getchar();reader->balance = balance;printf("充值成功!\n");printf("按任意键返回\n");getchar();return;}reader = reader->next;}}printf("密码错误!\n");printf("按任意键返回\n");getchar();return;}}printf("没有该管理员\n");printf("按任意键返回\n");getchar();return;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。