图书管理系统 C语言

前言

​  ​  这是我学习C语言的第三个较正式的小项目,同样也是目前代码量和难度最大的一个挑战。这个图书管理的开发整体框架图如下,我自己凭借我能够想到的做了这么一个框架图,然后不断地去实现这些划分出来的模块。

思路分析

 ​   整个系统是由一个个小的功能模块组成的,我将其用思维导图的方式展现出来更有利于去实现这些功能模块。

 ​   图书管理系统由图书信息系统和借阅系统组成,图书信息系统是管理图书库存的,通过它实现图书的增加、删除以及像用户展示图书信息的功能,而借阅系统则是实现用户借书还书以及查询借书情况功能。

 ​  通过不断细分的模块去实现这些功能,一边写一边调试。

具体实现

  1. 首先,经过思考,把这些功能模块用函数表达出来,尽量思考的全面,先通过函数声明以及定义把它们放到框架里面,然后一个一个具体的去写相应的代码。

    #define _CRT_SECURE_NO_WARNINGS  //用于scanf警告//头文件
    #include<stdio.h>
    #include<string.h> //用于字符串比较 登陆系统以及查找信息
    #include<stdlib.h>
    #include<windows.h> //背景色 屏幕清除
    #include<conio.h>     getch()函数//宏定义
    #define SIZE 20
    #define ACCOUNT_PASSWORD "beipiao_707770"
    #define LEN sizeof(struct book) //分配内存
    #define LEN1 sizeof(struct reader)
    #define ABC 'chaz'-'0' /*后面变量名太多 并且提示字符常量过多 用此表                        */示/* 结构体定义 *///图书信息
    struct book{char name[SIZE];    //书名char author[SIZE];  //作者char publish[SIZE]; //出版社int  amount;        //数量float price;        //单价struct book* next;
    };
    //借阅者信息
    struct reader{char rname[SIZE];  //姓名char bname[SIZE];  //借阅书名char date[SIZE];   //借阅时间int rnum;          //数量struct reader* next;
    };/* 函数声明 *///初始化页面
    void menu();
    //选择系统
    void SelectSystem();
    //书籍数量
    int NUM_BOOk();  //返回值为int类型
    //借书人信息
    int NUM_READER(); //返回值为int类型//图书管理系统
    void Library_System();
    //新建图书信息
    void New_Bulit();
    //删除图书信息
    void Delete();
    //查询图书信息
    void Inquire();
    //浏览图书信息 (打印)
    void Browse();
    //返回上一级
    void Return(int i);//借阅系统
    void Lending_System();
    //借书
    void Lending();
    //还书
    void Repay();
    //查询借书情况】
    void Show_Lending();
    //查询信息
    void Show_Look();

 ​  这里面有我自己最开始就已经想到的,也有后面增加的,有的函数所实现的功能与我预想的不符,但还是可以用。

2.具体实现 函数定义

  • 通过函数来统计书籍的数量以及借阅者信息,返回值为int类型。为后面的循环提供条件。
/* 函数定义 *///书籍数量信息
int NUM_BOOK()
{FILE*fp;int txcl=0,n;float tprice =0;char tname[SIZE]={'\0'},tauthor[SIZE]={'\0'},tpublish[SIZE]={'\0'};fp=fopen("library.txt","r"); //以只读形式打开文件for (n=0;!feof(fp);n++) //逐个打开文件    fscanf(fp,"%s%s%s%d%f",tname,tauthor,tpublish,&txcl,&tprice);n--;  //n初始赋值为0fclose(fp); //关闭文件return(n);}//借书人信息int NUM_READER(){FILE*p;int ID=0,n;char lname[SIZE]={'\0'},ldate[SIZE]={'\0},lsname[SIZE]={'\0};fp=fopen("reader.txt","r"); //以只读方式打开文件for(n=0;!feof(fp);n++);  //逐个打开文件fscanf(fp,"%d%s%s%s ",&ID,&lname,&ldate,lsname);n--; //n初始赋值为0fclose (fp);return (n);}

 ​   这三个页面我写的很粗糙,还可以进行优化,返回上一级这个函数我开始是没有想到的,但最开始写到这里时才发现不返回上一级很难处理,所以就加了一个返回上一级的函数,同样也可以进行优化。思路都是一样的,通过按键或者输入数据进行判断,调用上一级函数。

 ​   账号登录这里我没有进行分开处理,分开处理需要加加两个储存账户和密码的文件,和借阅者信息文件一样的,输入错误这里也是,我并没有具体的去实现重新输入。我这个是1.0版本,不出意外的话以后会进行优化,学习其他的语言之后可能也会做一个类似的项目,虽然目前这个我觉得都不能称之为项目(哈哈) 。,。
 ​  这里开始用了system()进行了屏幕清除,后面也有用到,头文件为#include<windows.h>。


//返回上一级
void Return (int i)
{switch (i) {case 1: Library_System();break;case 2: Lending_System();break;}
}//初始化页面
void menu()
{int i;char m[SIZE]; //账户及密码printf("****************************************************\n");printf("*              欢迎使用图书管理系统1.0             *\n");printf("*          1. 登录系统       2. 退出系统           *\n");printf("****************************************************\n");printf("\n");printf("请输:->");scanf("%d", &i);//登录 if (i == 1) {int ret_1; //比较结果//输入printf("输入账户及密码:");scanf("%s", m);//s_gets(m, SIZE);//判断是否正确  ret_1 = strcmp(m, ACCOUNT_PASSWORD);if (ret_1 == 0){printf("登录成功!\n");system("cls");//选择系统SelectSystem();}     }//退出else {return;}
}//图书管理系统
void Library_System()
{int i;system("cls");printf("****************************************************\n");printf("*          1.新建  2.删除       3.查询              *\n");printf("*          4.浏览  5.返回上一级  6.结束              *\n");printf("****************************************************\n");printf("\n");printf("请输:->");scanf("%d", &i);switch (i) {case 1:New_Bulit();break;case 2:Delete();break; case 3:Inquire();break; case 4:Browse();break; case 5:Return(1);break;case 6:return 0;break;}
}//借阅系统
void Lending_System()
{int i;printf("****************************************************\n");printf("*                 1.借书       2.还书               *\n");printf("*                 3.查询       4.浏览               *\n");printf("*                 5.返回上一级  6.结束               *\n");printf("****************************************************\n");printf("\n");printf("请输:->");scanf("%d", &i);switch (i){case 1:Lending();break;case 2:Repay();break;case 3:Inquire();break;case 4:Browse();break;case 5:Return(1);break;case 6:return 0;break;default:printf("输入有误,重新输入!\n");break;}
}
  • 新建图书信息这些功能都涉及了文件和链表操作,文件的建立、读写,链表的增加、删除。
//新建图书信息
void New_Bulit()
{FILE *fp;char bname[SIZE]={'\0},bauthor[SIZE]={'\0'},bpublish[SIZE]={'\0'};int bamount=0;float bprice=0;system("cls");if((fp=fopen("library.txt","r"))==NULL) //打开文件{fp=fopen("library.txt","w");//以只写的形式打开文件,若不存在则新建fclose(fp);}fp=fopen("library.txt","a"); //以追加的形式打开文件,若不存在则新建printf("\n请按以下格式输入图书信息:\n 书名  作者  出版社   进库量  单价");for (;i!=27;) //为了实现一次输入后按esc退出  这是我没有想到的{printf("请输入:\n");scanf("%s%s%s%d%f",bname,bauthor,bpublish,&bamount,&bprice);fprintf(fp,"%-9s%-14s%-16s%-7d%-.2f\n",bname,bauthor,bpublish,bamount,bprice);printf("继续输入请按回车,结束请按Esc\n");i=_getch(); //用getch 会有报错for (;i!=13&&i!=27;) /*证只能是CR和Esc才能退出循环,输入其他字符无用,暂停程序,按‘CR’继续*/i=_getch();}fclose(fp);printf("操作成功,按任意键返回上一级!\n");Library_System();
}
  • 删除图书信息和新建图书类似,把删除后的链表覆盖到原有文件
//删除图书信息
void Delete()
{struct book*head=NULL; //头结点struct book*p,*p1,*p2;int tamount =0,n=0,j,k;float tprice=0;char tname[SIZE]={'\0'},tauthor[SIZE]={'\0'},tpublish[SIZE]={'\0'},tnum[SIZE]={'\0'};char dname[SIZE]={'\0'}; //删除书籍的名字char i;FILE *fp;if((fp=fopen("library.txt","r"))==NULL) //打开文件,判断{system("cls");printf("\n记录文件不存在,按任意键返回!"):—getch();Return (1);}else //实现删除功能{system ("cls");printf("\n请输入要删除的书籍名字:");scanf("%s",dname);printf("\n确认删除请回车,取消请按Esc\n");i=_getch();for (;i!=13&&i!=27;)i=_getch();if(i=27) //取消Return(1);fp=fopen("library.txt","r");j=NUM_BOOK();for (k=0;k<j;k++){fsanf(fp,"%s%s%s%d%f",tname,tauthor,tpublish,&tamount,&tprice);if(strcmp(dname,tname)) //将不同名字的信息复制到链表{n++; //比较结果相同则n=0,不执行if,不同则执行if(n==1) //建立链表{p1=p2=(struct book*)malloc(LEN);head=p1;}else{p2->next=p1;p2=p1;p1=(struct book*)malloc(LEN); //新建链表}strcpy(p1->name,tname);//复制书名strcpy(p1->author,tauthor);//复制作者名字strcpy(p1->publish,tpublish); //复制出版社p1->amount=tamount;//复制数量p1->price=tprice; //复制单价}  if(n==0) //图书只有一项且这一项刚好和要删除的相同{head=NULL;}else //建立链表的最后一个储存空间{p2->next=p1;p1->next=NULL;fclose(fp);}}fp=fopen("library.txt","w");//清空文件,只写打开,然后关闭fclose(fp);fp=fopen("library.txt","a");//追加文件p=head;for(;p!=NULL;)//把链表内容覆盖到文件{fprintf(fp, "%-9s%-14s%-16s%-7d%-8.2f\n", p->name, p->author, p->publish,  p->amount, p->price);p = p->next;}fclose(fp);system("cls");printf("\n删除成功 \n按任意键返回上一层\n");_getch();//返回上一层Return(1);}
}
  • 查询相对而言简单,在文件中去查找匹配,根据结果输出
//查询图书信息
void Inquire()
{FILE *fp;int k=0,camount=0,m=0,n=0;float price=0;char cname[SIZE]={'\0'},cauthor[SIZE]={'\0'},cpublish[SIZE]={'\0'};char i;char target[SIZE]={'\0'};if((fp=fopen("library.txt","r"))==NULL) //打开文件{system("cls");printf("\n记录文件不存在,按任意键返回!");_getch();Return (1);}system("cls");m=NUM_BOOK();for(n=0;n<m;n++){fscanf(fp,"%s%s%s%d%f",cname,cauthor,cpublish,&camount,&cprice);if(!strcmp(target,cname)||!strcmp(target,cauthor)){if(k==0){printf("查询结果:\n\n");printf("书名\t\t作者\t\t出版社\t\t库存量\t单价\n");}printf("%-8s%-14s%-16s%-7d%-8.2f\n",cname,cauthor,cpublish,camount,cprice);k++;}}if(k==0) //文件夹为空则输出无记录并返回上一级{system("cls");printf("\n无符合记录!\n");_getch();Return (1);}fclose(fp);//查询结束_getch();Return (1);
}
  • 浏览图书则是把文件中的信息遍历之后打印出来
//浏览图书信息
void Browse()
{FILE*fp;int n=0;int k=0,m=0,amount=0;float price=0;char name[SIZE]={'\0'},author[SIZE]={'\0'},publish[SIZE]={'\0'};char i;if((fp=fopen("library.txt","r"))==NULL){system("cls");printf("\n记录文件不存在,按任意键返回!");_getch();Return (1);}n=NUM_BOOK();if(n==0){system("cls");printf("\n无任何记录!");}fp=fopen("library.txt","r");//打开只读文件system("cls");printf("\t书名\t作者\t出版社\t\t出版社\t\t库存量\t单价\n");for(m=0;m<n;m++) //输出数据{fscanf(fp,"%s%s%s%d%f",name,author,publish,&amount,&price);printf("%-14s%-16s%-18s%-7d%-8.2f\n", name, author, publish, amount, price); }fclose(fp);printf("\n按任意键返回\n");_getch();Return (1);
}
  • 借书 首先判断是否存在要借的书,再进行下一步记录借阅者信息操作 具体操作没太明白(copy了一段)
//借书
void Lending()
{FILE*fp,*fp2;struct book*head;struct book*p,*p1,*p2;int i,loop,k,n=0,flag=0,s=0;int lnum = 0;int lamount = 0;float lprice=0;char tname[SIZE]={'\0'},tauthor[SIZE]={'\0'},tpublish[SIZE]={'\0'},ttname[SIZE]={'\0'},rname[SIZE]={'\0'},date[SIZE]={'\0'},taname[SIZE]={'\0'};system("cls");if((fp=fopen("library.txt","r"))==NULL){system("cls");printf("\n图书馆无库存,按任意键退出!");_getch();exit(0);}else{printf("\n请输入借阅书名:\n请输入:");scanf("%s",taname);k=NUM_BOOK();for(i=0;i<k;i++)//先将图书信息建立链表,更改库存{fscanf(fp,"%s%s%s%d%f",tname,tauthor,tpublish,&lamount,&price);n++;if(n==1){p1=p2=(struct book*)malloc(LEN);head=p1;}else{p2->next=p1;p2=p1;p1=(struct book*)malloc(LEN);}strcpy(p1->name, tname);//复制书名strcpy(p1->author, tauthor);//复制作者strcpy(p1->publish, tpublish);//复制出版社p1->amount = lamount;//复制现存量p1->price = tprice;//复制单价}if(n==0)head=NULL;else{p2->next=p1;p1->next=NULL;fclose(fp);}}p=head;for(;p!=NULL;){if(!strcmp(p->name,taname))//判断要借的书是否存在{flag=1;loop=p->amount;(p->amount)--;}p=p->next;if(flag&&(loop>0)) //存在被借图书并且库存大于0,把库存量变化后的链表存入文件{fp = fopen("library.txt", "w");fclose(fp);fp = fopen("library.txt", "a");p = head;for (; p != NULL;){fprintf(fp, "%-9s%-14s%-16s%-7d%-8.2f\n", p->name, p->author, p->publish, p->amount, p->price);p = p->next;}free(p);fclose(fp);if ((fp2 = fopen("reader.txt", "r")) == NULL)//建读者文件夹存入借书信息{fp2 = fopen("reader.txt", "w");//打开只读文件fclose(fp2);}fp2 = fopen("reader.txt", "a");printf("\n请按以下格式输入读者信息:\n 证号 姓名 借书日期 借书书名\n请输入:");//录入读者信息scanf("%d %s %s %s", &lnum, rname, date, taname);fprintf(fp2, "\n%-8d%-23s%-18s%-10s\n", lnum, rname, date, taname);fclose(fp2);printf("借书成功!请两个月内归还!!!按任意键返回\n");_getch();//返回Return(2);//调用借阅系统}    }
}
  • 还书 先确定还书者信息,与借阅者文件比较,存在则删去他的信息并且书籍库存量加一。
//还书
void Repay()
{FILE*fp,*fp2;strcut reader*head,*p1,*p2;struct book*lhead1=NULL;struct book*zp1,*lp1,*lp2;int txcl=0,i;float tprice=0;char tname[20] = { '\0' }, tauthor[20] = { '\0' },tpublish[20] = { '\0' }, ttname[20] = { '\0' };int ttzhenghao = 0, tzhenghao = 0, n = 0, k = 0, t = 0, flag = 0;char tmingzi[20] = { '\0' }, triqi[20] = { '\0' }, tzname[20] = { '\0' }, ttzname[20] = { '\0' };char hitkey = 0;system("cls");{if((fp=fopen("reafer.txt","r"))==NULL)//不存在借书人{system("cls");printf("\n不存在借书人,按任意键退出!");_getch();system("cls");Return (2);}else{{printf("\n请输入读者证号和书名:\n请输入:");scanf("%d %s", &ttzhenghao, ttzname);//输入还书证号和书名k = NUM_READER();//获取读者文件夹信息个数for (i = 0; i < k; i++)//读取读者文件夹信息{fscanf(fp, "%d%s%s%s\n ", &tzhenghao, tmingzi, triqi, tzname);if ((ttzhenghao == tzhenghao) && !strcmp(ttzname, tzname))//如果证号书名存在,则标记为1flag = 1;}fclose(fp);fp = fopen("reader.txt", "r");//打开读者文件,删除借书信息if (flag){for (i = 0; i < k; i++)//将读者文件复制到链表{fscanf(fp, "%d%s%s%s\n ", &tzhenghao, tmingzi, triqi, tzname);//读取文件信息if (!((ttzhenghao == tzhenghao) && !strcmp(ttzname, tzname))){n++;if (n == 1){p1 = p2 = (struct reader*)malloc(LEN1);//新建链表head = p1;}else{p2->next = p1;p2 = p1;p1 = (struct reader*)malloc(LEN1);//新建链表}p1->rnum = tzhenghao;//复制证号strcpy(p1->rname, tmingzi);//复制读者名字strcpy(p1->date, triqi);//复制日strcpy(p1->bname, tzname);//复制书名}}if (n == 0)head = NULL;else{p2->next = p1;p1->next = NULL;fclose(fp);}fp = fopen("reader.txt", "w");//清空读者文件fclose(fp);fp = fopen("reader.txt", "a");//追加信息p = head;for (; p != NULL;)//把链表内容覆盖读者文件{fprintf(fp, "\n%-8d%-23s%-18s%-10s\n", p->rnum, p->rname, p->date, p->bname);p = p->next;}free(p);fclose(fp);}}}}if (flag)//标记为1,即还书时更改库存{{{printf("确认还书请按回车!");for (; hitkey != 13 && hitkey != 27;)hitkey = _getch();if (hitkey == 13)printf("成功!按任意键返回!");n = 0; flag = 0;fp3 = fopen("library.txt", "r");//打开图书馆文件k = NUM_BOOK();//获取图书馆文件个数for (i = 0; i < k; i++)//将图书馆文件复制到链表{fscanf(fp2, "%s%s%d%f",tname, tauthor, &txcl, &tprice);//读取信息n++;if (n == 1){lp1 = lp2 = (struct book*)malloc(LEN);//新建链表lhead1 = lp1;}else{lp2->next = lp1;lp2 = lp1;lp1 = (struct book*)malloc(LEN);//新建链表}strcpy(lp1->name, tname);//复制书名strcpy(lp1->author, tauthor);//复制作者strcpy(lp1->publish, tpublish);//复制出版社lp1->amount = txcl; //复制现存量lp1->price = tprice;//复制单价}if (n == 0){lhead1 = NULL;}else{lp2->next = lp1;lp1->next = NULL;fclose(fp2);}}}zp1 = lhead1;for (; zp1 != NULL;){if (!(strcmp(zp1->name, ttzname)))//寻找书名相同++(zp1->amount);//现存量加1zp1 = zp1->next;}fp2 = fopen("library.txt", "w");//清空图书馆文件fclose(fp);fp2 = fopen("library.txt", "a");//追加信息zp1 = lhead1;for (; zp1 != NULL;)//把链表内容覆盖图书馆文件{fprintf(fp2, "-9s%-14s%-16s%-7d%-8.2f\n",zp1->name, zp1->author, zp1->publish, zp1->amount, zp1->price);zp1 = zp1->next;}fclose(fp2);_getch();//返回Return(2);//调用借阅系统}elseprintf("不存在此信息!按任意键返回!");_getch();//返回Return(2);//调用借阅系统
}
  • 查询借书情况,把所有的借书信息打印出来
//查询借书情况
void Show_Lending()
{FILE*fp;int ID=0,xcl=0,n=0,i=0,j=0;char name[SIZE]={'\0'},date[SIZE]={'\0'},bname[SIZE]={'\0'};if((fp=fopen("reader.txt"."r"))==NULL)//打开只读文件{system("cls");printf("\n记录文件不存在,按任意键返回!");_getch();Return(2);}n==NUM_BOOK();if(n==0){system("cls");printf("\na无任何记录!");}fp=fopen("reader.txt","r");system("cls");printf("\n证号\t读者姓名\t\t借书日期\t书名\n");for(;!feof(fp);)//输出信息  foef()是在文件已经打开的基础上用于验证文件是否读取结束{fscanf(fp,"%d%s%s%s\n",&ID,name,date,bname);printf("\n%-8d%-23s%-18s%-10s\n",ID,name,date,bname);}fclose(fp);printf("\n按任意键返回!\n");_getch();Return(2);
}
  • 查询一个人的借书情况, 输入要查找的证件号或者姓名到借阅者文件里面匹配,输出相应的结果。
//查询信息
void Show_Look()
{FILE*fp;int num=0,k=0,amount=0,m=0,n=0;char ID[SIZE]={'\0'},date[SIZE]={'\0'},bname[SIZE]={'\0'};char i=0;char target[size]={'\0'};if((fp=fopen("reader.txt","r"))==NULL)//打开只读文件{system("cls");printf("\n记录文件不存在,按任意键返回!");_getch();Return (2);}system("cls");printf("请输入证件号或者姓名查询:\n");scanf("%s",target);system("cls");n=NUM_BOOK();for(n=0;n<m;n++){fscanf(fp,"%d%s%s%s",&num,name,date,bname);if(!strcmp(target,name)||(ABC)==num){if(k==0){printf("查询结果:\n\n");printf("\n证号\t读者姓名\t\t借书日期\t书名\n");}printf("\n%-8%-23s%-18s%-10s\n",ID,name,date,bname);k++;}}if(k==0) //文件夹为空则输出无记录并返回上一级{system("cls");printf("\n无符合记录\n");_getch();Return(2);}fcose(fp);_getch();Return(2);
}

总结

  • 通过这个小项目的练手,主要总结出了两方面的问题。

  •  ​  首先,我在准备的过程中,思考不足,很多地方没有想到,比如返回上一级这个功能。结果可想而知,在动手敲代码的时候总会有很多临时需求冒出来,很是痛苦。并且在准备的过程中我并没有很强的逻辑性,所以在后面写文档的时候需要重新整理思路,当然,在这个过程中我也收获了许多。在准备的时候我选择用思维导图的方式,我初步学习了如何制作思维导图,更加熟悉小工具的使用。准备周期长但准备效果并没有达到预期。
     ​   其次,就是在敲代码的过程中出现的问题。 万事开头难,这一次并没有出现明显开头难的问题,我对比上一次这次明显有进步,我自己先把大致的框架写了出来,然后具体去实现。初生牛犊不怕虎,很明显。然后就出现了问题,开始解决问题,有的问题还没有解决掉,可能是我自己经验知识点还不够,所以这些问题我会过一段时间再回过头来解决。有一个问题感觉很初级,就是变量命名,虽然这次涉及的变量命名不是很多,但我还是在命名上出现了问题,命名没有弄好的那注释就很重要(虽然注释本来就很重要),不然过段时间自己都不知道这些变量是什么意思。每次解决问题的过程就是提升自己的过程,这一次我已经有了不错的收获。
    下面是我的一些自我鼓励吧,也是心中的一些想法。
     ​  每当自己心里有一个想法的时候,我们要尽可能地去实现它,学编程真的得多敲代码,有时候在实际行动中会出现许多以前自己没有遇到过的问题,而解决这些问题就是提升自己的有效途径,这与学习书本知识是不一样的,而这也是我认为编程的魅力之处,虽然这个过程很痛苦,但痛并快乐着。
     ​  实践是检验真理的唯一标准,学习就得不断实践。每天坚持学习,哪怕每天进步一点点我们也会不断靠近我们的目标,制定好每天的计划然后努力完成,坚持下去,会有许多收获的,虽然可能别人无法理解,但我们自己要坚定我们所热爱的,朝着目标前进。可能是自学的原因,也有其他方面的影响,遇到很难的问题的时候我也会逃避, 但最后还是会花时间去解决,尽管问题有时候还是不能解决,但这很正常,我们过段时间后可能新学到的知识会让我们理解之前的一些问题。学习没有捷径可走,我相信笨鸟先飞、勤能补拙,我自己是不会轻易放弃的,总得去试一试,哪怕结果不如人意,但我还是想去看看风景,哈哈哈。

图书管理系统 C语言相关推荐

  1. c语言学生综合测评系统_c语言图书管理系统_c语言学生综合测评系统_c语言个人账本管理系统...

    c语言销售管理系统设计 c语言设计管理系统,c图书管理系统设计,学生管理系统c语言,职工管理系统c语言,c语言图书管理系统,c语言成绩管理系统,c语言管理系统,c语言银行管理系统,c语言工资管理系统, ...

  2. 课程设计图书管理系统c语言,图书管理系统c语言课程设计c语言课程设计作业获得95分全院第一......

    > 下载中心  >   > 图书管理系统 c语言课程设计 english version 图书管理系统 c语言课程设计 所属分类: 开发工具:c/c++ 文件大小:2720kb 下载 ...

  3. 图书管理系统C语言程序设计课程,vs c语言图书管理平台课程设计_图书管理平台c语言程序设计_c语言课程设计 图书管理系统...

    #include #include #include #include //#include #define MAX 100 struct Student { int num;/*书代号*/ char ...

  4. 图书管理系统 C语言链表实现 学校大作业功能齐全(书籍信息以及用户信息保存在附带的txt文件中)

    不废话直接附上源代码下载链接(一杯奶茶钱就能换一套图书管理系统哦~): C语言链表实现图书管理系统功能齐全(书籍信息以及用户信息保存在附带的txt文件中)-C文档类资源-CSDN文库 抱歉本人总是忘记 ...

  5. c语言大作业书店图书管理系统,c语言课程设计 书店管理系统.pdf

    c语言课程设计 书店管理系统 计算机程序设计(C语言) 课程设计报告 题目:图书管理系统 学院: 专业: 班级: 学号: 姓名: 指导教师: 设计日期:2013年06月24 日 一.选题背景: 设计一 ...

  6. c语言大作业书店图书管理系统,C语言_课程设计—书店图书管理系统.doc

    计算机程序设计(C语言) 课程设计报告 题目:图书管理系统 学院: 专业: 班级: 学号: 姓名: 指导教师: 设计日期:2013年06月24日 一.选题背景: 设计一个图书管理系统,管理员通过登陆账 ...

  7. c语言大作业书店图书管理系统,C语言课程设计书店管理系统.pdf

    计算机程序设计(C语言) 课程设计报告 题目:图书管理系统 学院: 专业: 班级: 学号: 姓名: 指导教师: 设计日期:2013年06月24 日 一.选题背景: 设计一个图书管理系统,管理员通过登陆 ...

  8. 图书管理系统C语言版

    图书管理系统是一种用于组织.存储和管理图书相关信息的软件系统.C语言版的图书管理系统是使用C语言开发的一种图书管理软件.这种系统通常可以实现图书的借阅.归还.查询等功能,方便图书馆工作人员和读者使用.

  9. c语言图书管理系统(c语言图书管理系统源代码)

    如何使用C语言编写图书管理系统? 图书管理系统是运行于Windows系统下的应用软件,主要用于对图书馆中的图书信息进行增.删.改.查等操作,并且还可对使用该系统的用户进行登录名和密码的管理等.系统给用 ...

  10. 图书管理系统python语言-Python简易版图书管理系统

    本文实例为大家分享了python图书管理系统的具体代码,供大家参考,具体内容如下 """ 图书管理系统 """ import random ...

最新文章

  1. mysql optimize_真正实现千人千面?教你用Optimize收割精准流量
  2. 解决ORA-28000: the account is locked
  3. Java 中 Comparable 和 Comparator 比较
  4. 天天象棋 残局闯关 第19关
  5. 阿里面试经历JAVA总结
  6. jvm7 jvm8_我们真的仍然需要32位JVM吗?
  7. 所生成项目的处理器架构“MSIL”与引用“***”的处理器架构“x86”不匹配。这种不匹配可能会导致运行时失败。请考虑通过配置管理器......
  8. juniper srx 1500 HA及双线路自动切换配置
  9. 计算机专业中专排名,江西计算机专业学校排名中专
  10. Codeforces Round #172 (Div. 2) C. Rectangle Puzzle 数学题几何
  11. 开源网站管理工具—Altman
  12. 通俗有趣讲解Atomic原子类的实现原理
  13. 《惢客创业日记》2019.05.20(周一)向技术大牛请教(二)
  14. oracle12c性能测试,Oracle12c IMO 测试
  15. Flutter: Dart 参数,以及 @required 与 required
  16. Android仿微信视频聊天窗口,Android仿微信语音聊天界面设计
  17. 因为相信所以看见,既然看见注定坚信《17》
  18. 初识 Mac机子 关机命令
  19. greenplum列存
  20. Android获取一周每一天的日期

热门文章

  1. 在Application中集成Microsoft Translator服务之使用http获取服务
  2. Mac安装Gradle eclipse安装buildship插件
  3. yii2 配置文件加载顺序, 以及调用自定义配置信息。
  4. 将PowerPCB 中的pcb文件导入到Protel中使用
  5. POJ1915(Knight Moves)
  6. SQL Server 2008空间数据应用系列九:使用空间工具(Spatial Tools)导入ESRI格式地图数据...
  7. T-SQL DATEPART() Functions
  8. 国内首款安全软件开源,金山卫士源码共享
  9. mysql 1064 update_MySQL更新错误#1064
  10. 多元函数法曲率和主曲率的几何解释