圖書管理系統(tǒng)c語言課程設(shè)計(jì)
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于圖書管理系統(tǒng)c語言課程設(shè)計(jì)的問題,以下是小編對(duì)此問題的歸納整理,讓我們一起來看看吧。
創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀企業(yè),服務(wù)客戶遍布全國,相關(guān)業(yè)務(wù)請(qǐng)撥打175-8598-2043,或微信:1454722008
本文目錄:
一、圖書管理系統(tǒng)C語言設(shè)計(jì)(c#免入)
#include <dos.h>
#include <bios.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#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;/*光標(biāo)坐標(biāo),x行,y列*/
struct menustruct/*菜單用的結(jié)構(gòu)體*/
{
char name[10];/*主菜單名*/
char str[10][20];/*選項(xiàng)*/
int n;/*選項(xiàng)數(shù)*/
}ml[3];/*使用了3個(gè),可根據(jù)需要增刪*/
typedef struct BookList/*書的結(jié)構(gòu)體*/
{
char num[20];/*圖書編號(hào)*/
char name[20];/*書名*/
int price;/*書的價(jià)格*/
char person[20];/*借閱人*/
int yes;/*判斷書是否存在或者已經(jīng)借出,1存在,0借出*/
struct BookList *next;
}Book;
typedef struct MemberList/*會(huì)員的結(jié)構(gòu)體*/
{
char name[20];/*會(huì)員的姓名*/
char sex[2];/*會(huì)員的性別*/
int age;/*會(huì)員的年齡*/
struct MemberList *next;
}Member;
char save[4096];/*保存文本區(qū)域空間*/
/*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);/*菜單選項(xiàng)的控制*/
void Enter(int m,int n);/*菜單選項(xiàng)的具體功能*/
void BookAdd();/*添加圖書*/
void BookConsult();/*圖書查詢*/
void BookDel();/*刪除圖書資料*/
void BookBorrow();/*借書*/
void BookReturn(); /*還書*/
void MemberAdd(); /*增加會(huì)員*/
void MemberConsult();/*查詢會(huì)員*/
void MemberDel(); /*刪除會(huì)員*/
void MemberBook(); /*查詢會(huì)員借書信息*/
void Help(); /*幫助*/
void Ver(); /*版本信息*/
void ClrScr();/*自定義清屏函數(shù)*/
void DrawFrame(int left,int up,int right,int down,int textcolor,int backgroundcolor);/*畫邊框*/
/***主函數(shù)****/
void main(void)
{
Menu();/*初始化界面*/
Run();
/*具體操作過程*/
}
/*初始化界面*/
void Menu()
{
system("cls"); /*調(diào)用系統(tǒng)的清屏命令*/
textbackground(BLUE);/*將背景設(shè)置為藍(lán)色*/
window(1,1,25,80);
clrscr();
textx=3;/*光標(biāo)初始化位置*/
texty=2;
gotoxy(1,2);
printf("%c",218);/*畫左上角*/
for(i=0;i<78;i++)
printf("%c",196); /*畫水平直線*/
printf("%c",191);/*畫右上角*/
for(i=3;i<=23;i++)
{
gotoxy(1,i);
printf("%c",179); /*畫垂直線*/
gotoxy(80,i);
printf("%c",179);
}
printf("%c",192); /*畫左下角*/
for(i=0;i<78;i++)
printf("%c",196);
printf("%c",217); /*畫右下角*/
gotoxy(1,1);
textcolor(7); /*設(shè)置灰色*/
for(i=0;i<80;i++)
cprintf("%c",219);/*用符號(hào)實(shí)現(xiàn)畫主菜單的灰色背景區(qū)*/
Selectitem(); /*調(diào)用選項(xiàng)函數(shù)*/
DrawSelectitem(); /*畫選項(xiàng)*/
gettext(2,3,78,23,c); /*保存當(dāng)前文本區(qū)域*/
}
/*定義菜單*/
void Selectitem()
{
strcpy(ml[0].name,"Book");/*下面的具體選項(xiàng)補(bǔ)空格是為了各菜單黑色背景相同*/
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 ");/*退出系統(tǒng)*/
ml[0].n=6; /*保存菜單的項(xiàng)數(shù)*/
strcpy(ml[1].name,"Member");
strcpy(ml[1].str[0],"Register ");/*添加新會(huì)員*/
strcpy(ml[1].str[1],"Find ");/*查詢會(huì)員資料*/
strcpy(ml[1].str[2],"Delete ");/*刪除會(huì)員資料*/
strcpy(ml[1].str[3],"Member&book ");
ml[1].n=4;
strcpy(ml[2].name,"Help");/*系統(tǒng)幫助*/
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); /*設(shè)置背景顏色為淺灰色*/
gotoxy(3+x*20,y);
for(j=0;z[j];j++)
{
if(j==0)
textcolor(RED);/*第一個(gè)字母顯示紅色*/
else
textcolor(BLACK); /*設(shè)置黑色*/
cprintf("%c",z[j]); /*輸出菜單名*/
}
}
/*顯示選中菜單*/
void BlackText(int x,int y,char *z)
{
textbackground(0); /*設(shè)置背景顏色為黑色*/
textcolor(15); /*設(shè)置文本顏色為白色*/
gotoxy(3+20*x,y);/*定位坐標(biāo)*/
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: /*上光標(biāo)鍵的操作控制*/
{
if(textx==3)
textx=23;
textx--;
gotoxy(texty,textx);
}break;
case DOWN: /*下光標(biāo)鍵的操作控制*/
{
if(textx==23)
textx=3;
textx++;
gotoxy(texty,textx);
}break;
case LEFT: /*左光標(biāo)鍵的操作控制*/
{
if(texty==2)
texty=79;
texty--;
gotoxy(texty,textx);
}break;
case Backspace: /*擦除鍵的設(shè)置*/
{
if(texty==2&&textx==3)
continue;
else
{
if(texty!=2)
texty--; /*擦除鍵的細(xì)節(jié)問題,先擦去東西,然后光標(biāo)還要往后退一格*/
else
if(texty==2)
{
texty=78;
textx--;
}
gotoxy(texty,textx);
printf(" ");
gotoxy(texty,textx);
}
}break;/*end case 0xe08*/
case RIGHT: /*右光標(biāo)鍵的操作控制*/
{
if(texty==79)
texty=2;
texty++;
gotoxy(texty,textx);
}break;
case SPACE: /*空格鍵的操作*/
{
if(texty==79)
continue;
else
{
gotoxy(texty,textx); /*空格的細(xì)節(jié)操作*/
printf(" ");
texty++;
gotoxy(texty,textx);
}
}break;
case ENTER: /*回車的控制操作*/
{
if(textx==23)
continue;
textx++;
texty=2;
gotoxy(texty,textx);
}break;
default : /*非控制鍵的結(jié)果*/
{
if(texty==79&&textx==23)/*到達(dá)最后就不再輸出*/
continue;
else
if(texty==79&&textx!=23) /*到行的最后*/
{
textx++;
texty=2;
}
gotoxy(texty,textx);/*輸出結(jié)果*/
printf("%c",key);
if(texty==79) /*如果texty==79就不執(zhí)行*/
continue;
else /*如果沒到行尾就繼續(xù)執(zhí)行,使光標(biāo)向前移動(dòng)一位*/
texty++;
}
}
}/*大循環(huán)的大括號(hào)*/
}
/*畫邊框函數(shù)*/
void DrawFrame(int l,int u,int r,int d,int tcolor,int bcolor)
{
textbackground(bcolor); /*背景顏色*/
textcolor(bcolor); /*文本顏色*/
for(i=l;i<=r;i++) /*輸出背景區(qū)域*/
{
for(j=u;j<=d;j++)
{
gotoxy(i,j);
printf("%c",219); /*輸出背景字符*/
}
}
textcolor(tcolor);/*邊框顏色*/
for(i=u+1;i<d;i++) /*在背景區(qū)域內(nèi)輸出邊框線*/
{
gotoxy(l,i);
cprintf("%c",179); /*垂直線*/
gotoxy(r,i);
cprintf("%c",179);
}
for(i=l+1;i<r;i++)
{
gotoxy(i,u);
cprintf("%c",196); /*水平線*/
gotoxy(i,d);
cprintf("%c",196);
}
gotoxy(l,u);
cprintf("%c",218);/*左上角*/
gotoxy(r,u);
cprintf("%c",191);/*右上角*/
gotoxy(l,d);
cprintf("%c",192);/*左下角*/
gotoxy(r,d);
cprintf("%c",217); /*右下角*/
/* gettext(l+1,u+1,r-1,d-1,save1);*//*保存邊框內(nèi)區(qū)域*/
}
/*顯示具體下拉選擇項(xiàng)目*/
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++)/*輸出所選菜單各選項(xiàng)*/
{
if(i==3)
BlackText(n,i,ml[n].str[i-3]);/*默認(rèn)選中第一項(xiàng)*/
else
RedText(n,i,ml[n].str[i-3]);/*其余各項(xiàng)首字符紅色顯示*/
}
gotoxy(79,1);
MoveMl(n,3);/*菜單選項(xiàng)的控制*/
}
/*菜單選項(xiàng)的控制,n決定水平項(xiàng),x決定下拉的選項(xiàng)*/
void MoveMl(int n,int x)
{
int flag=1;
while(flag)
{
gotoxy(79,1);
key=bioskey(0);/*接收按鍵*/
gotoxy(79,1);
switch(key)
{
case ESC:/*退出循環(huán)*/
puttext(1,1,80,25,save);/*恢復(fù)打開菜單前的樣子*/
flag=0;
break;
case LEFT:/*移到左邊的選項(xiàng)*/
puttext(1,1,80,25,save);/*恢復(fù)打開菜單前的樣子*/
if(n==0)/*往左移動(dòng)越界的話移到最后一個(gè)選項(xiàng)*/
DrawMl(2);
else
DrawMl(n-1);
flag=0;
break;
case RIGHT:/*移動(dòng)右邊的選項(xiàng)*/
puttext(1,1,80,25,save);/*恢復(fù)打開菜單前的樣子*/
if(n==2)/*往右移動(dòng)越界的話移到第一個(gè)選項(xiàng)*/
DrawMl(0);
else
DrawMl(n+1);
flag=0;
break;
case UP:/*具體選項(xiàng)往上移動(dòng)*/
RedText(n,x,ml[n].str[x-3]);/*輸出紅色字體*/
if(x==3)/*移到最上面再按上鍵,就移到最下面*/
x=3+ml[n].n-1;
else
x--;/*移動(dòng)到新的要顯示的內(nèi)容*/
BlackText(n,x,ml[n].str[x-3]);/*輸出黑色字體*/
flag=1;
break;
case DOWN:/*具體選項(xiàng)往下移動(dòng)*/
RedText(n,x,ml[n].str[x-3]);
if(x==(3+ml[n].n-1))/*移動(dòng)到最底下再按下鍵就移到最上面*/
x=3;
else
x++;/*移動(dòng)到新的要顯示的內(nèi)容*/
BlackText(n,x,ml[n].str[x-3]);
flag=1;
break;
case ENTER:
puttext(1,1,80,25,save);/*恢復(fù)打開菜單前的樣子*/
Enter(n,x-3);/*菜單選項(xiàng)的具體功能*/
flag=0;
break;
}
gotoxy(79,1);
}
}
/*菜單選項(xiàng)的具體功能*/
void Enter(int m,int n)
{
switch(m)
{
case 0:switch(n) /*選擇了圖書菜單選項(xiàng)*/
{
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;/*退出系統(tǒng)*/
case 1: switch(n) /*選擇了會(huì)員菜單選項(xiàng)*/
{
case 0: MemberAdd();break;/*添加會(huì)員*/
case 1: MemberConsult();break;/*會(huì)員查詢*/
case 2:MemberDel();break;/*刪除一個(gè)會(huì)員資料*/
case 3:MemberBook();/*查詢某個(gè)會(huì)員所借圖書情況*/
}break;
case 2:switch(n) /*選擇了幫助菜單選項(xiàng)*/
{
case 0:Help();break;
case 1:Ver();
}
}/*結(jié)束外switch*/
}void BookAdd()
{
FILE *fp;
Book consultbook;
fp=fopen("book.txt","rb");/*讀方式打開文件*/
if(fp==NULL)
fp=fopen("book.txt","wb"); /*寫方式打開文件*/
else/*如果有書就添加*/
{
fclose(fp);
fp=fopen("book.txt","ab");/*追加方式打開文件*/
}
ClrScr();/*清屏*/
printf("Please intput a new book num: ");/*逐個(gè)輸入新圖書的資料*/
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",&consultbook.price);
strcpy(consultbook.person,"");
consultbook.yes=1;/*表示書存在未借出*/
consultbook.next=NULL;
fwrite(&consultbook,sizeof(Book),1,fp);/*塊寫*/
fclose(fp); /*關(guān)閉文件*/
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","rb");
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:",consultbook.name);
gotoxy(2,4+i*5);
printf("This book num is %s.",consultbook.num);
gotoxy(2,5+i*5);
printf("This book's price is %d.",consultbook.price);
gotoxy(2,6+i*5);
printf("This book is browwed by %s.",consultbook.person);
gotoxy(2,7+i*5);
printf("This book's state is %d.",consultbook.yes);
i++;
flag=1; /*查找數(shù)據(jù)標(biāo)志*/
}
}
if(flag==0)
{
ClrScr();
gotoxy(2,3);
printf("Sorry, %s doesn't exist in the library!",bookname);
}
fclose(fp);
}
/*刪除圖書資料*/
void BookDel()
{
FILE *fp;
Book *head,*p,*q;
char bookname[20];
fp=fopen("book.txt","rb");/*讀方式打開文件*/
if(fp==NULL)/*沒找到文件*/
{
gotoxy(2,3);
printf("Error!");
fclose(fp);
return;
}
head=p=q=(Book*)malloc(sizeof(Book));/*將文件內(nèi)容放入鏈表*/
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;/*最后一個(gè)結(jié)點(diǎn)的后繼為空*/
fclose(fp);
ClrScr();
printf("Input the book name: ");
gets(bookname); /*輸入圖書名*/
p=head;
while(p!=NULL)/*按名字查找要?jiǎng)h除的圖書*/
{
if(strcmp(p->name,bookname)==0)/*找到要?jiǎng)h除的圖書*/
{
if(p==head) /*如果是第一個(gè)結(jié)點(diǎn)*/
head=head->next;
else
q->next=p->next;/*不是第一個(gè)結(jié)點(diǎn)*/
break;
}
q=p; /*指針后移*/
p=p->next;
}
fp=fopen("book.txt","wb");/*刪除后從鏈表的頭開始重新保存*/
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); /*輸入會(huì)員名*/
if((fp=fopen("member.txt","rb"))==NULL)/*沒找到文件*/
{
gotoxy(2,3);
printf("Cannot open file!\n");
return;
}
else
while(!feof(fp))/*查詢會(huì)員資料*/
{
fread(&consultmember,sizeof(Member),1,fp);
if(strcmp(consultmember.name,membername)==0)
{
mflag=1; /*是會(huì)員標(biāo)志*/
break;
}
}
fclose(fp);
if(mflag==0)
{
gotoxy(2,4);
printf("You are not a member now,pleas register first!");/*不是會(huì)員不能借書*/
return;
}
gotoxy(3,5);
printf("Please input the book name: ");
gets(bookname); /*輸入圖書名*/
ClrScr();
if((fp=fopen("book.txt","rb+"))==NULL)/*沒找到文件*/
{
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)/*圖書已經(jīng)借出的判斷*/
{
gotoxy(2,3);
printf("This book has borrowed!\n");
break;
}
else
{
consultbook.yes=0; /*作借出標(biāo)志*/
strcpy(consultbook.person,membername);/*登記借書會(huì)員*/
fseek(fp,-1L*sizeof(Book),1);/*從當(dāng)前位置前移一條記錄指針*/
fwrite(&consultbook,sizeof(Book),1,fp);/*寫記錄*/
gotoxy(2,3);
printf("Borrowed success!\n");
flag=1;/*借出書標(biāo)志*/
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","rb+"))==NULL)/*沒找到文件*/
{
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)/*圖書已經(jīng)借出的判斷*/
{
consultbook.yes=1;/*作圖書未借書標(biāo)志,表示已還書*/
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);/*剛開始已經(jīng)用gettext把藍(lán)色的一塊地方保存下來,現(xiàn)在再還原*/
gotoxy(2,3);
}
/*會(huì)員注冊(cè)*/
void MemberAdd()
{
FILE *fp;
Member consultmember;
fp=fopen("member.txt","rb");
if(fp==NULL)/*如果沒會(huì)員就新建*/
fp=fopen("member.txt","wb");
else/*如果有會(huì)員就添加*/
{
fclose(fp);
fp=fopen("member.txt","ab");/*追加方式打開*/
}
ClrScr();
gotoxy(2,3);
printf("Please intput new member's name: ");/*逐個(gè)輸入會(huì)員的資料*/
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",&consultmember.age);
fwrite(&consultmember,sizeof(Member),1,fp);/*寫入記錄*/
fclose(fp);
ClrScr();
}
/*查詢會(huì)員*/
void MemberConsult()
{
FILE *fp;
Member consultmember;
char membername[20];
int flag=0;
ClrScr();
gotoxy(2,3);
printf("Please input the member's name: ");/*輸入要查詢的會(huì)員名*/
gets(membername);
fp=fopen("member.txt","rb");
if(fp==NULL)/*沒找到文件*/
{
ClrScr();
gotoxy(2,3);
printf("Error!\n");
fclose(fp);
return;
}
while(!feof(fp))/*查詢會(huì)員資料*/
{
fread(&consultmember,sizeof(Member),1,fp);
if(strcmp(consultmember.name,membername)==0)/*比較*/
{
ClrScr();
gotoxy(2,3);
printf("The member %s 's information as follow:",consultmember.name);
gotoxy(2,4);
printf("This member'sex is %s.",consultmember.sex);
gotoxy(2,5);
printf("This member 's age is %d.",consultmember.age);
flag=1;
break;
}
}
if(flag==0)
{
ClrScr();
gotoxy(2,3);
printf("The member %s doesn't exist in the library!",membername);
}
fclose(fp);
}
/*刪除會(huì)員資料*/
void MemberDel()
{
FILE *fp;
Member *head,*p,*q;
char membername[20];
fp=fopen("member.txt","rb");
if(fp==NULL)/*沒找到文件*/
{
gotoxy(2,3);
printf("Error!");
fclose(fp);
return;
}
head=p=q=(Member*)malloc(sizeof(Member));/*將文件內(nèi)容放入鏈表*/
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: ");/*輸入會(huì)員名*/
gets(membername);
p=head;
while(p!=NULL)/*按名字查找要?jiǎng)h除的書*/
{
if(strcmp(p->name,membername)==0)/*查找會(huì)員*/
{
if(p==head)
head=head->next;/*如果是第一條記錄*/
else
q->next=p->next;/*不是第一條記錄*/
break;
}
q=p; /*沒找到,則指針后移繼續(xù)找*/
p=p->next;
}
fp=fopen("member.txt","wb");/*刪除后重新保存*/
while(head!=NULL)
{
fwrite(head,sizeof(Member),1,fp);/*塊寫*/
head=head->next;
}
fclose(fp);
ClrScr();
}
字?jǐn)?shù)超了。。。。留個(gè)郵箱吧
二、c語言 圖書信息管理系統(tǒng)設(shè)計(jì)
通過測(cè)試!
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#define MAX 100
struct Student
{
int num;/*登錄號(hào)*/
char name[100];/*書名*/
char author[100];/*作者名*/
char fn[100];/*分類號(hào)*/
char place[100];/*出版單位*/
char day[100];/*出版時(shí)間*/
float money;/*價(jià)格*/
}stu[MAX];
main()/*主函數(shù)*/
{
void Input();/*輸入*/
void Display();/*輸出*/
void Find();/*查找*/
void Modify();/*刪除*/
void Change();/*修改*/
int n;
for(;;)
{
printf("\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("※ ※\n");
printf("※ 歡迎來到圖書信息管理系統(tǒng) ※\n");
printf("※ ※\n");
printf("※ ※\n");
printf("※ 主菜單 ※\n");
printf("※ ※\n");
printf("※ ▲1.圖書信息錄入 ▲ ※\n");
printf("※ ※\n");
printf("※ ▲2.圖書信息瀏覽 ▲ ※\n");
printf("※ ※\n");
printf("※ ▲3.圖書信息查詢 ▲ ※\n");
printf("※ ※\n");
printf("※ ▲4.圖書信息刪除 ▲ ※\n");
printf("※ ※\n");
printf("※ ▲5.圖書信息修改 ▲ ※\n");
printf("※ ※\n");
printf("※ ▲6.退出系統(tǒng) ▲ ※\n");
printf("※ ※\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n\n");
printf("請(qǐng)輸入選擇項(xiàng)(1-6):");
scanf("%d",&n);
printf("\n\n\n\n");
if(n>0&&n<7)
{
switch(n)
{
case 1:Input();break;
case 2:Display();break;
case 3:Find();break;
case 4:Modify();break;
case 5:Change();break;
case 6:printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("※ ※\n");
printf("※ 謝謝使用! ※\n");
printf("※ 再見! ※\n");
printf("※ ※\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");
exit(0);
}
}
else
{
printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("※ ※\n");
printf("※ 輸入錯(cuò)誤! ※\n");
printf("※ 請(qǐng)退出! ※\n");
printf("※ ※\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");
break;
}
}
}
void Find()/*查找*/
{
FILE *fp;
int i;
int choose,t;
char ans[100];
do
{
printf("1.按書名查找\n");
printf("2.按作者名查找\n");
printf("返回主菜單(其他數(shù)字)\n");
scanf("%d",&choose);
if(choose==1)
{
printf("輸入所查書名:\n");
scanf("%s",ans);
t=-1;
if(choose==1)
{
for(i=0;i<MAX;i++) if(strcmp(ans,stu[i].name)==0)
{
t=i;
fp=fopen("student","rb");
for(i=0;fread(&stu[i],sizeof(struct Student),1,fp)==1;i++)
printf("%d %s %s %s %s %s %f\n",stu[t].num,stu[t].name,stu[t].author,stu[t].fn,stu[t].place,stu[t].day,stu[t].money);
}
}
if(t==-1) printf("不存在該信息\n");
}
else if(choose==2)
{
printf("輸入所查作者名:\n");
scanf("%s",ans);
t=-1;
if(choose==2)
{
for(i=0;i<MAX;i++)
if(strcmp(ans,stu[i].author)==0)
{ t=i;
fp=fopen("student","rb");
for(i=0;fread(&stu[i],sizeof(struct Student),1,fp)==1;i++)
printf("%d %s %s %s %s %s %f\n",stu[t].num,stu[t].name,stu[t].author,stu[t].fn,stu[t].place,stu[t].day,stu[t].money);
}
}
if(t==-1) printf("不存在該信息\n");
}
else return;
}while(1);
}
void Display()/*輸出*/
{
FILE *fp;
int i;
fp=fopen("student","rb");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 圖書列表\n");
printf("-----------------------------------------------------------\n");
printf("登錄號(hào) 書名 作者名 分類號(hào) 出版單位 出版時(shí)間 價(jià)格\n");
printf("-----------------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct Student),1,fp)==1;i++)
{
printf("%6d %8s %8s %8s %8s %8s %8.2f\n",stu[i].num,stu[i].name,stu[i].author,stu[i].fn,stu[i].place,stu[i].day,stu[i].money);
}
fclose(fp);
}
void Input()/*輸入*/
{
FILE *fp;
int n;
fp=fopen("student","wb");
for(n=0;n<MAX;n++)
{
printf("n=%d 輸入序號(hào)n(當(dāng)輸入n=-1時(shí),返回),n=",n++);
scanf("%d",&n);
if(n==-1)
{
fclose(fp);
return;
}
else
{
printf("請(qǐng)輸入登錄號(hào) 書名 作者名 分類號(hào) 出版單位 出版時(shí)間 價(jià)格\n");
scanf("%d%s%s%s%s%s%f",&stu[n].num,stu[n].name,stu[n].author,stu[n].fn,stu[n].place,stu[n].day,&stu[n].money);
fwrite(&stu[n],sizeof(struct Student),1,fp);
}
}
fclose(fp);
}
void Modify()/*刪除*/
{
FILE *fp;
int i,flag,n,s,j;
fp=fopen("student","rb+");
rewind(fp);
printf(" 圖書列表\n");
printf("-----------------------------------------------------------\n");
printf("登錄號(hào) 書名 作者名 分類號(hào) 出版單位 出版時(shí)間 價(jià)格\n");
printf("-----------------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct Student),1,fp)==1;i++)
{
printf("%6d %8s %8s %8s %8s %8s %8.2f\n",stu[i].num,stu[i].name,stu[i].author,stu[i].fn,stu[i].place,stu[i].day,stu[i].money);
printf("\n");
}
n=i;
printf("輸入待刪除圖書號(hào):\n");
scanf("%d",&s);
for(i=0,flag=1;flag&&i<n;i++)
{
if(s==stu[i].num)
{
for(j=i;j<n-1;j++)
{
stu[j].num=stu[j+1].num;
strcpy(stu[j].name,stu[j+1].name);
strcpy(stu[j].author,stu[j+1].author);
strcpy(stu[j].fn,stu[j+1].fn);
strcpy(stu[j].place,stu[j+1].place);
strcpy(stu[j].day,stu[j+1].day);
stu[j].money=stu[j+1].money;
}
flag=0;
}
}
if(!flag)
n=n-1;
else
printf("沒有此號(hào)\n");
fp=fopen("student","wb");
for(i=0;i<n;i++)
fwrite(&stu[i],sizeof(struct Student),1,fp);
fclose(fp);
fp=fopen("student","r");
printf(" 圖書列表\n");
printf("-----------------------------------------------------------\n");
printf("登錄號(hào) 書名 作者名 分類號(hào) 出版單位 出版時(shí)間 價(jià)格\n");
printf("-----------------------------------------------------------\n");
for(i=0;i<n;i++)
{
fread(&stu[i],sizeof(struct Student),1,fp);
printf("%6d %8s %8s %8s %8s %8s %8.2f\n",stu[i].num,stu[i].name,stu[i].author,stu[i].fn,stu[i].place,stu[i].day,stu[i].money);
printf("\n");
}
fclose(fp);
}
void Change()/*修改*/
{
FILE *fp;
int i,num,n;
int flag=0;
printf("請(qǐng)輸入要修改的圖書號(hào):");
scanf("%d",&num);
for(i=0;i<=MAX;i++)
if(stu[i].num==num)
{
printf(" 圖書列表\n");
printf("-----------------------------------------------------------\n");
printf("登錄號(hào) 書名 作者名 分類號(hào) 出版單位 出版時(shí)間 價(jià)格\n");
printf("-----------------------------------------------------------\n");
printf("%6d %8s %8s %8s %8s %8s %8.2f\n",stu[i].num,stu[i].name,stu[i].author,stu[i].fn,stu[i].place,stu[i].day,stu[i].money);
printf("-----------------------------------------------------------\n\n");
n=i;
flag=1;
break;
}
if(flag==0)
{
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 輸入錯(cuò)誤!\n");
printf(" 請(qǐng)返回!\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
return;
}
printf("\n\n\n");
fp=fopen("student","rb+");
fseek(fp,n*sizeof(struct Student),0);
printf("登錄號(hào) 書名 作者名 分類號(hào) 出版單位 出版時(shí)間 價(jià)格\n");
scanf("%d%s%s%s%s%s%f",&stu[n].num,stu[n].name,stu[n].author,stu[n].fn,stu[n].place,stu[n].day,&stu[n].money);
fwrite(&stu[i],sizeof(struct Student),1,fp);
fclose(fp);
fp=fopen("student","rb");
printf(" 圖書列表\n");
printf("-----------------------------------------------------------\n");
printf("登錄號(hào) 書名 作者名 分類號(hào) 出版單位 出版時(shí)間 價(jià)格\n");
printf("-----------------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct Student),1,fp)==1;i++)
{
printf("%6d %8s %8s %8s %8s %8s %8.2f\n",stu[i].num,stu[i].name,stu[i].author,stu[i].fn,stu[i].place,stu[i].day,stu[i].money);;
}
printf("-----------------------------------------------------------\n\n");
fclose(fp);
}
三、用C語言編寫一個(gè)簡單的圖書管理小程序
源代碼如下:
#include<iostream>
#include<iomanip>
#include<string>
#include<fstream>
#include<stdio.h>
using namespace std;
const int maxb=10000; //最多的圖書
class book//圖書類
{
int tag; //刪除標(biāo)記1:已刪0:未刪
int number; //isbn書號(hào)
char name[20]; //書名
char author[10]; //主編
char number2[10];//版次
char position[20];//出版社
char time[20];//出版年
void addbook(int n,char *na,char *au,char *n2,char *da,char *ti,int pr) //增加圖書
{
tag=0;
number=n;
price=pr;
strcpy(name,na);
strcpy(author,au);
strcpy(number2,n2);
strcpy(position,da);
strcpy(time,ti);
onshelf=1;
}
擴(kuò)展資料
1、源程序中,很多符號(hào)都是成對(duì)匹配出現(xiàn)的,為避免遺漏必須配對(duì)使用的符號(hào)。
2、用花括號(hào)括起來的部分,但從程序結(jié)構(gòu)清晰,便于閱讀、理解、維護(hù)的角度出發(fā),建議在書寫程序時(shí)應(yīng)遵循以下規(guī)則,以養(yǎng)成良好的編程習(xí)慣。
3、一個(gè)說明或一條語句占一行,與該結(jié)構(gòu)開始處的左花括號(hào)對(duì)齊。
四、C語言圖書管理信息系統(tǒng)
借書的限制:教師180天,借15本;學(xué)生120天,借10本
圖書的信息: 書的編號(hào)號(hào),書名,作者,書的種類,書的總量以及書的剩余量
學(xué)生/教師信息: 學(xué)號(hào)/工號(hào)(4位數(shù)字字符),姓名,借書日期,還書日期(以此判定是否超出有效期)
(一)、查詢:(無條件或有條件指按所有字段查詢)
一、單鏈表上實(shí)現(xiàn)圖書信息管理
利用鏈表結(jié)構(gòu)實(shí)現(xiàn)圖書存儲(chǔ)
二 、二叉排序樹或平衡樹上實(shí)現(xiàn)圖書信息管理
利用二叉排序樹或平衡樹實(shí)現(xiàn)圖書的存儲(chǔ)
三、B_樹的操作(手工題)
插入、刪除操作:
從空的3階B_樹開始,依次插入20,30,50,52,60,68,70,10,80,90,40,75。畫出建樹過程,然后分別畫出刪除50,60,10,75,20的B_樹狀態(tài)。
1.課程設(shè)計(jì)的題目內(nèi)容要求
2.數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)思想和任務(wù)的總體結(jié)構(gòu)
鏈接: https://pan.baidu.com/s/11BBC4ec7x3l62u83lJeGpw
提取碼:1234
以上就是關(guān)于圖書管理系統(tǒng)c語言課程設(shè)計(jì)相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。
推薦閱讀:
對(duì)公賬戶收款二維碼怎么弄(對(duì)公賬戶收款二維碼怎么弄出來)