设计并实现一个简单的图书管理系统
本次实训内容主要在于训练学生的C语言的基本编程能力,通过C语言输入输出、循环语句、子函数设计、数组、结构体等知识点,完成一个简单图书管理系统的设计开发。实现录入图书、删除指定图书、修改指定图书和查询指定图书的基本信息等主要功能。
1.创建图书节点
- #include
- #include
- #include
- using namespace std;
- struct Book{
- char id[101];// ISBN
- char name[101];// 书名
- double price;//价格
- };
2.构建顺序表
- typedef struct{
- Book *elem;//顺序表首地址
- int len;//表长
- }Sqlist;
3.图书信息的展示
- void display(Sqlist L){ //不需要修改里面的信息
- //展示表L中所有的图书信息
- int maxIndex = L.len;
- for(int i=1;i<=maxIndex;i++){
- printf("%s\t%s\t%lf\n",L.elem[i].id , L.elem[i].name , L.elem[i].price);//\n换行 \tTab
- }
- }
4.图书信息的查找
- int findBook(Sqlist L,char id[]){
- //在表L 中查找 是否有 ISBN码为id的图书
- //遍历 表 L,如果出现了L中 图书的id == id
- int index = 0;//假设不存在
- int len = L.len;
- for(int i=1;i<=len;i++){
- if(strcmp(L.elem[i].id,id) == 0){//strcmp()
- index = i;//修正假设 (假设修正法)
- break;
- }
- }
- return index;
- }
5.图书信息的插入
- void insertBook(Sqlist &L,Book t,int x){
- //判断x 是否合法
- int len = L.len;//1--len
- if(x<1 || x>len){
- printf("位置不合法!\n");
- }else{
- //将len 至 x位置的图书全部向后移动一个位置
- for(int i=len;i>=x;i--){
- L.elem[i+1] = L.elem[i];
- }
-
- //将图书 t 加入 L的x位置
- L.elem[x] = t;
- L.len++;
- printf("图书插入成功!\n");
- }
- }
6.图书信息的删除
- void deleteBook(Sqlist &L,int indexT){
- int len = L.len;//1--len
-
- for(int i=indexT;i<len;i++){
- L.elem[i] = L.elem[i+1];
- }
- L.len--; //长度-1
-
- }
7.图书信息总览
- int main(){
- int n;
- //顺序存储结构
- Sqlist L;
- L.elem =(Book *)malloc(sizeof(Book)*100);
- L.len=0;
- printf("-------------图书录入------------\n");
- printf("请输入图书的数目:\n");
- scanf("%d",&n);
- for(int i=1;i<=n;i++){
- printf("请输入第 %d 本图书的ISBN码:\n",i);
- scanf("%s",L.elem[i].id);
- getchar();
- printf("请输入第 %d 本图书的书名:\n",i);
- scanf("%s",L.elem[i].name);
- getchar();
- printf("请输入第 %d 本图书的价格:\n",i);
- scanf("%lf",&L.elem[i].price);
- L.len++;
- }
-
- //展示所有的图书
- printf("\n-------------图书展示------------\n");
- display(L);
-
- //图书查找功能
- printf("\n-------------图书查找------------\n");
- printf("请输入要查询图书的ISBN码:\n");
- char name[101];
- scanf("%s",name);
- //图书查找函数:返回值如果是0 则表示系统中无此图书,返回值非0 则表示系统中有次图书,返回值代表下标
- //参数:L name
- int index = findBook(L,name);
- if(index==0){
- printf("ISBN码为:%s的图书不存在!",name);
- }else{//图书存在
- printf("图书存在,要查找的图书信息如下:\n");
- printf("%s\t%s\t%lf\n",L.elem[index].id, L.elem[index].name, L.elem[index].price);
-
- }
-
- //图书插入
- //提示用户输入图书信息
- Book t;
- int x;
- printf("\n-------------图书插入------------\n");
- printf("请输入要插入图书的ISBN码:\n");
- scanf("%s",t.id);
- printf("请输入要插入图书的名称:\n");
- scanf("%s",t.name);
- printf("请输入要插入图书的价格:\n");
- scanf("%lf",&t.price);
- printf("请输入要插入图书的位置(下标1--98):\n");
- scanf("%d", &x);
- //图书信息 整合 到了 t
- insertBook(L,t,x);
-
-
- //展示所有的图书
- printf("\n-------------图书展示------------\n");
- display(L);
-
-
- //图书删除
- int indexT;
- char idT[101];
- printf("\n-------------图书删除------------\n");
- printf("请输入要删除图书的编码:\n");
- scanf("%s",idT);
- //用户要删除 ISBN码为 idT 的图书
- indexT = findBook(L,idT);//如果 0 则idT不存在,如果非0则返回的是下标
- if(indexT!=0){//图书存在
- printf("图书存在,确定删除请按1\n");
- int d;
- scanf("%d",&d);
- if(d==1){
- //从表L 中删除 下标indexT
- deleteBook(L,indexT);
- printf("图书删除成功!\n");
- }
-
- }else{//==0
- printf("图书不存在!\n");
- }
-
-
- printf("\n-------------图书展示------------\n");
- display(L);
-
- return 0;
- }