您的当前位置:首页图书馆管理系统(C语言程序设计)

图书馆管理系统(C语言程序设计)

来源:锐游网
图书馆管理系统(C语言程序设计).txt生活是一张千疮百孔的网,它把所有激情的水都漏光了。寂寞就是你说话时没人在听,有人在听时你却没话说了! 百度知道 > 电脑/网络 > 程序设计 > C/C++添加到搜藏已解决 图书管理系统C语言设计(c#免入)

悬赏分:100 - 解决时间:2010-6-25 14:38 1、功能描述,新进图书基本信息的输入。 2. 图书基本信息的查询。 3. 对撤消图书信息的删除。 4. 为借书人办理注册。

5.办理借书手续(非注册会员不能借书)。 6.办理还书手续

信息描述:有关该系统基本信息的描述,如:图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号等

大一新生的课程设计,那个只能用C语言来做,拜托各位了,两天之后要上交,网上找的调试都不成功。

记住一定要用C语言啊,千万不要用C++,调试成功后有悬赏分的 问题补充:我的邮箱是g080166@sina.com

各位大侠,答完后记得留自己的名字啊,这样我也好给分 对了,是要在vc的系统编译

提问者: g080166 - 五级最佳答案#include #include #include #include #include #include #include

#define LEFT 0x4b00 /*左*/ #define RIGHT 0x4d00 /*右*/ #define DOWN 0x5000 /*下*/ #define UP 0x4800 /*上*/

#define SPACE 0x3920 /*空格*/ #define ESC 0x011b /* ESC键*/ #define ENTER 0x1c0d /*回车键*/ #define Backspace 0xe08 /*擦除键*/ #define ALT_B 12288 /*组合键ALT_B */ #define ALT_M 12800/*组合键ALT_M */ #define ALT_H 8960/*组合键ALT_H */

int key;/*按键变量*/

int textx,texty;/*光标坐标,x行,y列*/

struct menustruct/*菜单用的结构体*/ {

char name[10];/*主菜单名*/ char str[10][20];/*选项*/ int n;/*选项数*/

}ml[3];/*使用了3个,可根据需要增删*/

typedef struct BookList/*书的结构体*/ {

char num[20];/*图书编号*/ char name[20];/*书名*/ int price;/*书的价格*/ char person[20];/*借阅人*/

int yes;/*判断书是否存在或者已经借出,1存在,0借出*/ struct BookList *next; }Book;

typedef struct MemberList/*会员的结构体*/ {

char name[20];/*会员的姓名*/ char sex[2];/*会员的性别*/ int age;/*会员的年龄*/ struct MemberList *next; }Member;

char save[4096];/*保存文本区域空间*/ /*char sav1[4096];*/

char c[4096];/*清屏专用空间*/

int i,j;/*常用变量*/

void Menu();/*初始化界面*/ void Selectitem();/*定义菜单*/

void DrawSelectitem();/*显示主菜单*/

void BlackText(int x,int y,char *z);/*选中菜单*/ void RedText(int x,int y,char *z);/*正常菜单*/ void Run();/*具体操作过程*/

void DrawMl(int n);/*显示下拉菜单*/

void MoveMl(int n,int x);/*菜单选项的控制*/ void Enter(int m,int n);/*菜单选项的具体功能*/ void BookAdd();/*添加图书*/ void BookConsult();/*图书查询*/ void BookDel();/*删除图书资料*/

void BookBorrow();/*借书*/ void BookReturn(); /*还书*/ void MemberAdd(); /*增加会员*/ void MemberConsult();/*查询会员*/ void MemberDel(); /*删除会员*/

void MemberBook(); /*查询会员借书信息*/ void Help(); /*帮助*/ void Ver(); /*版本信息*/

void ClrScr();/*自定义清屏函数*/

void DrawFrame(int left,int up,int right,int backgroundcolor);/*画边框*/

/***主函数****/ void main(void) {

Menu();/*初始化界面*/ Run();

/*具体操作过程*/ }

/*初始化界面*/ void Menu() {

system(\"cls\"); /*调用系统的清屏命令*/ textbackground(BLUE);/*将背景设置为蓝色*/ window(1,1,25,80); clrscr();

textx=3;/*光标初始化位置*/ texty=2; gotoxy(1,2);

printf(\"%c\画左上角*/ for(i=0;i<78;i++)

printf(\"%c\画水平直线*/ printf(\"%c\画右上角*/ for(i=3;i<=23;i++) {

gotoxy(1,i);

printf(\"%c\画垂直线*/ gotoxy(80,i); printf(\"%c\ }

printf(\"%c\画左下角*/ for(i=0;i<78;i++) printf(\"%c\

down,int textcolor,int

printf(\"%c\画右下角*/ gotoxy(1,1);

textcolor(7); /*设置灰色*/ for(i=0;i<80;i++)

cprintf(\"%c\用符号实现画主菜单的灰色背景区*/ Selectitem(); /*调用选项函数*/ DrawSelectitem(); /*画选项*/

gettext(2,3,78,23,c); /*保存当前文本区域*/ }

/*定义菜单*/

void Selectitem() {

strcpy(ml[0].name,\"Book\");/*下面的具体选项补空格是为了各菜单黑色背景相同*/ strcpy(ml[0].str[0],\"Add \");/*添加图书*/ strcpy(ml[0].str[1],\"Find \");/*查询图书*/ strcpy(ml[0].str[2],\"Delete \");/*删除图书资料*/ strcpy(ml[0].str[3],\"Borrow \");/*借书*/ strcpy(ml[0].str[4],\"Return \");/*还书*/ strcpy(ml[0].str[5],\"Exit \");/*退出系统*/ ml[0].n=6; /*保存菜单的项数*/ strcpy(ml[1].name,\"Member\");

strcpy(ml[1].str[0],\"Register \");/*添加新会员*/ strcpy(ml[1].str[1],\"Find \");/*查询会员资料*/ strcpy(ml[1].str[2],\"Delete \");/*删除会员资料*/ strcpy(ml[1].str[3],\"Member&book \"); ml[1].n=4;

strcpy(ml[2].name,\"Help\");/*系统帮助*/

strcpy(ml[2].str[0],\"This System \"); strcpy(ml[2].str[1],\"Ver \"); ml[2].n=2; }

/*显示主单名*/

void DrawSelectitem() {

for(i=0;i<3;i++)

RedText(i,1,ml[i].name); /*显示主菜单名,且首字母为红色*/ }

/*正常显示菜单*/

void RedText(int x,int y,char *z) {

textbackground(7); /*设置背景颜色为浅灰色*/ gotoxy(3+x*20,y); for(j=0;z[j];j++) {

if(j==0)

textcolor(RED);/*第一个字母显示红色*/ else

textcolor(BLACK); /*设置黑色*/

cprintf(\"%c\输出菜单名*/ } }

/*显示选中菜单*/

void BlackText(int x,int y,char *z) {

textbackground(0); /*设置背景颜色为黑色*/ textcolor(15); /*设置文本颜色为白色*/ gotoxy(3+20*x,y);/*定位坐标*/ cputs(z); /*输出菜单名字符串*/ }

/*按键操作过程*/ void Run() {

while(1) {

gotoxy(texty,textx);

key=bioskey(0);/*接收按键*/ switch(key) {

case ALT_B:

case ESC: DrawMl(0);break; /*显示下拉菜单1*/ case ALT_M: DrawMl(1);break;/*显示下拉菜单2*/ case ALT_H: DrawMl(2);/*显示下拉菜单3*/ case UP: /*上光标键的操作控制*/ {

if(textx==3) textx=23; textx--;

gotoxy(texty,textx); }break;

case DOWN: /*下光标键的操作控制*/ {

if(textx==23) textx=3; textx++;

gotoxy(texty,textx); }break;

case LEFT: /*左光标键的操作控制*/ {

if(texty==2) texty=79; texty--;

gotoxy(texty,textx); }break;

case Backspace: /*擦除键的设置*/ {

if(texty==2&&textx==3) continue; else {

if(texty!=2)

texty--; /*擦除键的细节问题,先擦去东西,然后光标还要往后退一格*/ else

if(texty==2) { texty=78; textx--; }

gotoxy(texty,textx); printf(\" \");

gotoxy(texty,textx); }

}break;/*end case 0xe08*/ case RIGHT: /*右光标键的操作控制*/ {

if(texty==79) texty=2; texty++;

gotoxy(texty,textx); }break;

case SPACE: /*空格键的操作*/ {

if(texty==79) continue; else {

gotoxy(texty,textx); /*空格的细节操作*/ printf(\" \"); texty++;

gotoxy(texty,textx); } }break;

case ENTER: /*回车的控制操作*/

{

if(textx==23) continue; textx++; texty=2;

gotoxy(texty,textx); }break;

default : /*非控制键的结果*/ {

if(texty==79&&textx==23)/*到达最后就不再输出*/ continue; else

if(texty==79&&textx!=23) /*到行的最后*/ {

textx++; texty=2; }

gotoxy(texty,textx);/*输出结果*/ printf(\"%c\

if(texty==79) /*如果texty==79就不执行*/ continue;

else /*如果没到行尾就继续执行,使光标向前移动一位*/ texty++; } }

}/*大循环的大括号*/ }

/*画边框函数*/

void DrawFrame(int l,int u,int r,int d,int tcolor,int bcolor) {

textbackground(bcolor); /*背景颜色*/ textcolor(bcolor); /*文本颜色*/ for(i=l;i<=r;i++) /*输出背景区域*/ {

for(j=u;j<=d;j++) {

gotoxy(i,j);

printf(\"%c\输出背景字符*/ } }

textcolor(tcolor);/*边框颜色*/

for(i=u+1;igotoxy(l,i);

cprintf(\"%c\垂直线*/ gotoxy(r,i);

cprintf(\"%c\ }

for(i=l+1;igotoxy(i,u);

cprintf(\"%c\水平线*/ gotoxy(i,d);

cprintf(\"%c\ }

gotoxy(l,u);

cprintf(\"%c\左上角*/ gotoxy(r,u);

cprintf(\"%c\右上角*/ gotoxy(l,d);

cprintf(\"%c\左下角*/ gotoxy(r,d);

cprintf(\"%c\右下角*/

/* gettext(l+1,u+1,r-1,d-1,save1);*//*保存边框内区域*/ }

/*显示具体下拉选择项目*/ void DrawMl(int n) {

gettext(1,1,80,25,save);/*保存被掩盖的地方*/ BlackText(n,1,ml[n].name);/*反选显示主菜单*/

DrawFrame(3+20*n-1,2,3+20*n+19,3+ml[n].n,0,7);/*下拉菜单的边框*/ for(i=3;i<3+ml[n].n;i++)/*输出所选菜单各选项*/ {

if(i==3)

BlackText(n,i,ml[n].str[i-3]);/*默认选中第一项*/ else

RedText(n,i,ml[n].str[i-3]);/*其余各项首字符红色显示*/ }

gotoxy(79,1);

MoveMl(n,3);/*菜单选项的控制*/ }

/*菜单选项的控制,n决定水平项,x决定下拉的选项*/ void MoveMl(int n,int x) {

int flag=1; while(flag) {

gotoxy(79,1);

key=bioskey(0);/*接收按键*/ gotoxy(79,1); switch(key) {

case ESC:/*退出循环*/

puttext(1,1,80,25,save);/*恢复打开菜单前的样子*/ flag=0; break;

case LEFT:/*移到左边的选项*/

puttext(1,1,80,25,save);/*恢复打开菜单前的样子*/ if(n==0)/*往左移动越界的话移到最后一个选项*/ DrawMl(2); else

DrawMl(n-1); flag=0; break;

case RIGHT:/*移动右边的选项*/

puttext(1,1,80,25,save);/*恢复打开菜单前的样子*/ if(n==2)/*往右移动越界的话移到第一个选项*/ DrawMl(0); else

DrawMl(n+1); flag=0; break;

case UP:/*具体选项往上移动*/

RedText(n,x,ml[n].str[x-3]);/*输出红色字体*/ if(x==3)/*移到最上面再按上键,就移到最下面*/ x=3+ml[n].n-1; else

x--;/*移动到新的要显示的内容*/

BlackText(n,x,ml[n].str[x-3]);/*输出黑色字体*/ flag=1; break;

case DOWN:/*具体选项往下移动*/ RedText(n,x,ml[n].str[x-3]);

if(x==(3+ml[n].n-1))/*移动到最底下再按下键就移到最上面*/ x=3; else

x++;/*移动到新的要显示的内容*/ BlackText(n,x,ml[n].str[x-3]); flag=1; break; case ENTER:

puttext(1,1,80,25,save);/*恢复打开菜单前的样子*/

Enter(n,x-3);/*菜单选项的具体功能*/ flag=0; break; }

gotoxy(79,1); } }

/*菜单选项的具体功能*/ void Enter(int m,int n) {

switch(m) {

case 0:switch(n) /*选择了图书菜单选项*/ {

case 0:BookAdd();break;/*添加图书*/ case 1:BookConsult();break;/*图书查询*/ case 2:BookDel();break;/*删除一本图书资料*/ case 3:BookBorrow();break;/*借书*/ case 4:BookReturn();break;/*还书*/ case 5:exit(0);break; } break;/*退出系统*/

case 1: switch(n) /*选择了会员菜单选项*/ {

case 0: MemberAdd();break;/*添加会员*/

case 1: MemberConsult();break;/*会员查询*/ case 2:MemberDel();break;/*删除一个会员资料*/ case 3:MemberBook();/*查询某个会员所借图书情况*/ }break;

case 2:switch(n) /*选择了帮助菜单选项*/ {

case 0:Help();break; case 1:Ver(); }

}/*结束外switch*/ }void BookAdd() {

FILE *fp;

Book consultbook;

fp=fopen(\"book.txt\读方式打开文件*/ if(fp==NULL)

fp=fopen(\"book.txt\写方式打开文件*/ else/*如果有书就添加*/ {

fclose(fp);

fp=fopen(\"book.txt\追加方式打开文件*/ }

ClrScr();/*清屏*/

printf(\"Please intput a new book num: \");/*逐个输入新图书的资料*/ gets(consultbook.num); gotoxy(2,4);

printf(\"Please input the new book name: \"); gets(consultbook.name); gotoxy(2,5);

printf(\"Please input the new book's price: \"); scanf(\"%d%*c\ strcpy(consultbook.person,\"\");

consultbook.yes=1;/*表示书存在未借出*/ consultbook.next=NULL;

fwrite(&consultbook,sizeof(Book),1,fp);/*块写*/ fclose(fp); /*关闭文件*/ ClrScr(); }

/*图书查询*/

void BookConsult() {

FILE *fp;

Book consultbook;

char bookname[20]; /*书名*/ int flag=0,i=0; ClrScr(); gotoxy(2,3);

printf(\"Please input the book name: \"); gets(bookname); /*输入要查询的图书名*/ fp=fopen(\"book.txt\ if(fp==NULL)/*没找到文件*/ {

ClrScr(); gotoxy(2,3);

printf(\"Error!\"); fclose(fp); return; } else

while(!feof(fp))/*查询图书资料*/ {

fread(&consultbook,sizeof(Book),1,fp);

if(strcmp(consultbook.name,bookname)==0)/*如果查找到*/ {

ClrScr();

gotoxy(2,3+i*5);

printf(\"This book %s information as follow:\ gotoxy(2,4+i*5);

printf(\"This book num is %s.\ gotoxy(2,5+i*5);

printf(\"This book's price is %d.\ gotoxy(2,6+i*5);

printf(\"This book is browwed by %s.\ gotoxy(2,7+i*5);

printf(\"This book's state is %d.\ i++;

flag=1; /*查找数据标志*/ } }

if(flag==0) {

ClrScr(); gotoxy(2,3);

printf(\"Sorry, %s doesn't exist in the library!\ }

fclose(fp); }

/*删除图书资料*/ void BookDel() {

FILE *fp;

Book *head,*p,*q; char bookname[20];

fp=fopen(\"book.txt\读方式打开文件*/ if(fp==NULL)/*没找到文件*/ {

gotoxy(2,3);

printf(\"Error!\"); fclose(fp); return; }

head=p=q=(Book*)malloc(sizeof(Book));/*将文件内容放入链表*/ fread(p,sizeof(Book),1,fp); /*读第一条记录*/ while(!feof(fp)) {

q=p;

p=(Book*)malloc(sizeof(Book));

fread(p,sizeof(Book),1,fp); /*读记录*/

q->next=p;/*新记录插入到链表的尾*/ }

p->next=NULL;/*最后一个结点的后继为空*/ fclose(fp); ClrScr();

printf(\"Input the book name: \"); gets(bookname); /*输入图书名*/ p=head;

while(p!=NULL)/*按名字查找要删除的图书*/ {

if(strcmp(p->name,bookname)==0)/*找到要删除的图书*/ {

if(p==head) /*如果是第一个结点*/ head=head->next; else

q->next=p->next;/*不是第一个结点*/ break; }

q=p; /*指针后移*/ p=p->next; }

fp=fopen(\"book.txt\删除后从链表的头开始重新保存*/ while(head!=NULL) {

fwrite(head,sizeof(Book),1,fp);/*块写*/ head=head->next; }

fclose(fp); ClrScr(); }

/*借书*/

void BookBorrow() {

FILE *fp;

Book consultbook;

Member consultmember;

char bookname[20],membername[20]; int flag=0,mflag=0; ClrScr(); gotoxy(2,3);

printf(\"Please input the mermber name: \"); gets(membername); /*输入会员名*/

if((fp=fopen(\"member.txt\没找到文件*/ {

gotoxy(2,3);

printf(\"Cannot open file!\\n\"); return; } else

while(!feof(fp))/*查询会员资料*/ {

fread(&consultmember,sizeof(Member),1,fp); if(strcmp(consultmember.name,membername)==0) {

mflag=1; /*是会员标志*/ break; } }

fclose(fp); if(mflag==0) {

gotoxy(2,4);

printf(\"You are not a member now,pleas register first!\");/*不是会员不能借书*/

return; }

gotoxy(3,5);

printf(\"Please input the book name: \"); gets(bookname); /*输入图书名*/ ClrScr();

if((fp=fopen(\"book.txt\没找到文件*/ {

gotoxy(2,3);

printf(\"Cannot open file!\\n\"); return; }

while(!feof(fp))/*查询图书资料*/ {

fread(&consultbook,sizeof(Book),1,fp); if(strcmp(consultbook.name,bookname)==0) {

if(consultbook.yes==0)/*图书已经借出的判断*/ {

gotoxy(2,3);

printf(\"This book has borrowed!\\n\"); break; } else

{

consultbook.yes=0; /*作借出标志*/

strcpy(consultbook.person,membername);/*登记借书会员*/

fseek(fp,-1L*sizeof(Book),1);/*从当前位置前移一条记录指针*/ fwrite(&consultbook,sizeof(Book),1,fp);/*写记录*/ gotoxy(2,3);

printf(\"Borrowed success!\\n\"); flag=1;/*借出书标志*/ break; } } }

if(flag!=1) {

ClrScr(); gotoxy(2,3);

printf(\"Borrowed fail!\\n\");/*借书失败*/ }

fclose(fp); }

/*还书*/

void BookReturn() {

FILE *fp;

Book consultbook; char bookname[20]; int flag=0; ClrScr();

if((fp=fopen(\"book.txt\没找到文件*/ {

gotoxy(2,3);

printf(\"Can't open file!\\n\"); return; }

printf(\"Please input the book name: \"); gets(bookname); /*输入图书名*/ ClrScr();

while(!feof(fp))/*查询图书资料*/ {

fread(&consultbook,sizeof(Book),1,fp); if(strcmp(consultbook.name,bookname)==0) {

if(consultbook.yes==0)/*图书已经借出的判断*/ {

consultbook.yes=1;/*作图书未借书标志,表示已还书*/ strcpy(consultbook.person,\"\"); fseek(fp,-1L*sizeof(Book),1);

fwrite(&consultbook,sizeof(Book),1,fp); gotoxy(2,3);

printf(\"Return book success!\\n\"); flag=1; break; } } }

if(flag!=1)

printf(\"Return fail!\\n\"); fclose(fp); }

/*清除屏幕*/ void ClrScr() {

int i,j;

puttext(2,3,78,23,c);/*刚开始已经用gettext把蓝色的一块地方保存下来,现在再还原*/

gotoxy(2,3); }

/*会员注册*/ void MemberAdd() {

FILE *fp;

Member consultmember;

fp=fopen(\"member.txt\ if(fp==NULL)/*如果没会员就新建*/ fp=fopen(\"member.txt\ else/*如果有会员就添加*/ {

fclose(fp);

fp=fopen(\"member.txt\追加方式打开*/ }

ClrScr(); gotoxy(2,3);

printf(\"Please intput new member's name: \");/*逐个输入会员的资料*/ gets(consultmember.name); gotoxy(2,4);

printf(\"Please input new member's sex: \"); gets(consultmember.sex); gotoxy(2,5);

printf(\"Please input new member's age: \"); scanf(\"%d%*c\

fwrite(&consultmember,sizeof(Member),1,fp);/*写入记录*/ fclose(fp); ClrScr(); }

/*查询会员*/

void MemberConsult() {

FILE *fp;

Member consultmember; char membername[20]; int flag=0; ClrScr(); gotoxy(2,3);

printf(\"Please input the member's name: \");/*输入要查询的会员名*/ gets(membername);

fp=fopen(\"member.txt\ if(fp==NULL)/*没找到文件*/ {

ClrScr(); gotoxy(2,3);

printf(\"Error!\\n\"); fclose(fp); return; }

while(!feof(fp))/*查询会员资料*/ {

fread(&consultmember,sizeof(Member),1,fp);

if(strcmp(consultmember.name,membername)==0)/*比较*/ { ClrScr(); gotoxy(2,3);

printf(\"The member %s 's information as follow:\ gotoxy(2,4);

printf(\"This member'sex is %s.\ gotoxy(2,5);

printf(\"This member 's age is %d.\ flag=1; break; } }

if(flag==0) {

ClrScr(); gotoxy(2,3);

printf(\"The member %s doesn't exist in the library!\ }

fclose(fp); }

/*删除会员资料*/ void MemberDel() {

FILE *fp;

Member *head,*p,*q; char membername[20];

fp=fopen(\"member.txt\ if(fp==NULL)/*没找到文件*/ {

gotoxy(2,3);

printf(\"Error!\"); fclose(fp); return; }

head=p=q=(Member*)malloc(sizeof(Member));/*将文件内容放入链表*/ fread(p,sizeof(Member),1,fp); while(!feof(fp)) {

q=p;

p=(Member*)malloc(sizeof(Member));

fread(p,sizeof(Member),1,fp);/*读记录*/ q->next=p;/*链入到链表的尾部*/ }

p->next=NULL; fclose(fp); ClrScr();

printf(\"Please input the member's name: \");/*输入会员名*/ gets(membername); p=head;

while(p!=NULL)/*按名字查找要删除的书*/ {

if(strcmp(p->name,membername)==0)/*查找会员*/ {

if(p==head)

head=head->next;/*如果是第一条记录*/ else

q->next=p->next;/*不是第一条记录*/ break;

}

q=p; /*没找到,则指针后移继续找*/ p=p->next; }

fp=fopen(\"member.txt\删除后重新保存*/ while(head!=NULL) {

fwrite(head,sizeof(Member),1,fp);/*块写*/ head=head->next; }

fclose(fp); ClrScr(); }

因篇幅问题不能全部显示,请点此查看更多更全内容

Top