C语言课程设计图书馆管理系统加讲解

作者&投稿:典养 (若有异议请与网页底部的电邮联系)
c语言课程设计:图书管理系统设计的基本思路是什么?~

图书管理系统主要要求可以录入书籍,添加书目,查找书本信息,删除或修改信息,有的还要求显示是否被借阅等。
一般采用结构体数组,链表,文件操作和自定义函数。主要是需要对基础知识掌握牢固。
先定义结构体,然后对结构体的成员进行定义,选择数组存储书本各种信息。录入信息可以用for和do while循环等来做。
存放信息需要文件操作函数,比如fopen,fwrite等。
删除和添加可以删除节点或者增加节点。
查找之类的可以用字符串操作的各种函数实现。
附上参考源代码
#include #include #include #include #define books "f:\\books.txt"#define booksbak "f:\\booksbak.txt"struct bookinfo{char isbn[20];char title[30];char author[20];int count;};struct book{struct bookinfo onebook;struct book *next;};struct book *searchBook ( struct book *listptr,char isbn[]){while(listptr!=(struct book *)0)if (strcmp(listptr->onebook.isbn,isbn)==0)return listptr;elselistptr=listptr->next;return (struct book *)0;}void MainSearchbook(struct book *firstptr){struct book *ptr;char isbnno[20];printf("请输入ISBN:");scanf("%s",&isbnno);ptr=searchBook(firstptr,isbnno);if (ptr!=(struct book *)0){printf("找到了!!!
");printf("ISBN:%s
",ptr->onebook.isbn);printf("Title:%s
",ptr->onebook.title);printf("Author:%s
",ptr->onebook.author);}elseprintf("sorry,not found!!!
");}int addBook(struct book *listptr,struct bookinfo note){while(listptr->next!=0)listptr=listptr->next;listptr->next=(struct book *)malloc(sizeof(struct book));listptr->next->onebook=note;listptr->next->next=0;return 0;}void MainAdd(struct book *listptr,FILE *fp){int ok;struct bookinfo note;printf("请输入ISBN:");scanf("%s",¬e.isbn);printf("请输入Title:");scanf("%s",¬e.title);printf("请输入Author:");scanf("%s",¬e.author);ok=addBook(listptr,note);if (ok==0){//将加入的图书写到文件中保存fprintf(fp,"
%s %s %s %d",note.isbn,note.title,note.author,0);printf("添加图书成功!!!
");}elseprintf("添加图书失败!!!
");}int removeBook(struct book *listptr,char isbn[]){while(listptr->next!=(struct book *)0){if (strcmp(listptr->next->onebook.isbn,isbn)==0){listptr->next=listptr->next->next;return 0;}elselistptr=listptr->next;}return -1;}void MainRemove(struct book *listptr,FILE *fp)/************************************************************************//* 删除书籍函数,通过ISBN删除链表节点,同时删除文件中对应信息 *//* 删除文件中一行,用的是笨方法,把需要的信息写到新文件,删除旧文件,重命名..*//************************************************************************/{char isbnno[20];int ok;struct bookinfo onebook;printf("请输入ISBN:");scanf("%s",&isbnno);ok=removeBook(listptr,isbnno);if (!ok){FILE *fpbak;if ((fpbak=fopen(booksbak,"a+"))==NULL)printf("文件打开失败!!!
");fseek(fp,0,SEEK_SET); //移到文件开始while((fscanf(fp,"%s %s %s %d
",&onebook.isbn,&onebook.title,&onebook.author,&onebook.count))!=EOF){if (strcmp(onebook.isbn,isbnno)!=0){fprintf(fpbak,"%s %s %s %d
",onebook.isbn,onebook.title,onebook.author,onebook.count);}}fclose(fp);fclose(fpbak);if (remove(books)) //删除失败返回非0{printf("删除文件失败!!!
");return ;}elseif (rename(booksbak,books)) //重命名失败返回非0值{printf("重命名失败!!!
");return ;}printf("删除成功!!!
");}elseprintf("查无此书!!!");}int choice(void){int c;printf("1.查看图书
");printf("2.添加图书
");printf("3.删除图书
");printf("4.退出程序
");printf("请选择序号:");return c=getchar();//return c=getche();printf("

");}int addEntry(FILE *fp,struct book *firstptr)/************************************************************************//* 主要用来加载文件中存放的图书信息 *//************************************************************************/{struct bookinfo onebook;while((fscanf(fp,"%s %s %s %d
",&onebook.isbn,&onebook.title,&onebook.author,&onebook.count))!=EOF){while(firstptr->next!=0)firstptr=firstptr->next;firstptr->next=(struct book *)malloc(sizeof(struct book));firstptr->next->onebook=onebook;firstptr->next->next=0;}return 0;}int main(int argc,char *argv[]){int ch;struct book first;strcpy(first.onebook.isbn,"123456");strcpy(first.onebook.title,"Programming C");strcpy(first.onebook.author,"yhb");first.next=0;struct book *firstptr=&first; //链表头指针FILE *fp;if ((fp=fopen(books,"a+"))==NULL)printf("文件打开失败!!!");addEntry(fp,firstptr);while(1){ system("CLS"); //清屏/************************************************************************//* 想想这里为什么要清空缓冲区? *//*由于上一次(choice函数)的getchar(),还有一个'
'留在缓冲区.... *//*可以把这句话注释掉看看,没有这句话会遇到麻烦 *//*如果不用fflush,可以将上面的getchar()换成getche() *//*比较getchar(),getch(),getche()...... *//************************************************************************/fflush(stdin); ch=choice()-48;switch (ch){case 1:MainSearchbook(firstptr);break;case 2:MainAdd(firstptr,fp);break;case 3:MainRemove(firstptr,fp);break;case 4:printf("谢谢使用...
");exit(0);default:printf("请输入正确序号!");}system("PAUSE");}return 0;}

我只能给你个简陋的东西。这个你还得自己慢慢改。(只要你能看懂)自己看着办吧

#include
#include
#include
#include
#define MAX_NUM 45

struct studenter {
int ID;
char Name[10];
int Age;
char Sex[2];
int Birthday;
char Adress[15];
char TelNum[12];
char Email[10];
};

typedef struct studenter STUDENT;

void input(STUDENT stu[],int Max,int cn);
int findStudentID(STUDENT stu[],int findID,int Max);
void DisplayInfor(STUDENT stu[],int Max);
void DispMainMenu();
void DispQueryMenu();
char choice();
int InforInput(STUDENT stu[],int cn);
void QueryInfor(STUDENT stu[],int Max);
void EditInfor(STUDENT stu[],int Max);

void DispMainMenu()
{
printf("**************学生信息管理系统1.0**************
");
printf("1--学生信息录入 2--学生信息修改
");
printf("3--学生信息查询 4--学生信息删除
");
printf("5--学生信息排序 0--退出
");
printf("************************************************
");
printf("请选择(0--5):");
}

void DispQueryMenu()
{
printf("*****************请选择查询方式*****************
");
printf("1--按学号查询; 2--按姓名查询
");
printf("************************************************
");
printf("请选择(1--2):");
}

char choice()
{
char select;
select=getche();
getch();
return (select);
}

void DisplayInfor(STUDENT stu[],int Max)
{
int i;
printf("
学号 姓名 年龄 性别 出生年月 地址 电话 E-mail
");
for(i=0;i<Max;i++)
printf("%8d %10s %2d %2s %8d %15s %12s %10s",stu[i].ID,stu[i].Name,stu[i].Age,stu[i].Sex,stu[i].Birthday,stu[i].Adress,stu[i].TelNum,stu[i].Email);
printf("
");
}

void input(STUDENT stu[],int Max,int cn)
{
int i;
for(i=cn;i<Max+cn;i++)
{
printf("
请输入第%d个学生的学号 (8个字符以内):",i+1);
scanf("%d",&stu[i].ID);
printf("
姓名(10个字符以内):");
scanf("%s",stu[i].Name);
printf("
年龄:");
scanf("%d",&stu[i].Age);
printf("
性别(m或w):");
scanf("%s",&stu[i].Sex);
printf("
出生年月(8位):");
scanf("%d",&stu[i].Birthday);
printf("
地址:");
scanf("%s",&stu[i].Adress);
printf("
电话:");
scanf("%s",&stu[i].TelNum);
printf("
E-mail:");
scanf("%s",&stu[i].Email);

}
printf("
您的输入信息是:
");
DisplayInfor(stu,Max+cn);
}

int findStudentID(STUDENT stu[],int findID,int Max)
{
int i;
for(i=0;i<Max;i++)
{
if(stu[i].ID==findID)
break;
}
if(i<Max)
return i;
else
return -1;
}
int findStudentNAME(STUDENT stu[],char findNAME[10],int Max)
{
int i;
for(i=0;i<Max;i++)
{
if(!strcmp(stu[i].Name,findNAME))
break;
}
if(i<Max)
return i;
else
return -1;
}
int InforInput(STUDENT stu[],int cn)
{
int number;

printf("
请输入本次录入的学生人数: ");
scanf("%d",&number);
if(number>MAX_NUM)
{
printf("您输入的人数太多,大于%d人!
",MAX_NUM);
return (0);
}
input(stu,number,cn) ;
return (number+cn);
}

void QueryInfor(STUDENT stu[],int Max)
{
char select;
int i;
int findID;
char findNAME[10];
DispQueryMenu();
select=choice();
switch (select)
{
case '1':
printf("
按学号查询
请输入学生的学号: ");
scanf("%d",&findID);
if ((i=findStudentID(stu,findID,Max))!=-1)
{
printf("查找结果如下:
");
printf(" 学号 姓名 年龄 性别 出生年月 地址 电话 E-mail");
printf("%8d %10s %2d %2s %8d %15s %12s %10s",stu[i].ID,stu[i].Name,stu[i].Age,stu[i].Sex,stu[i].Birthday,stu[i].Adress,stu[i].TelNum,stu[i].Email);
}
else
printf("您输入的学号不存在!
");
break;
case '2':
printf("
按姓名查询
请输入学生的姓名: ");
scanf("%s",&findNAME);
if ((i=findStudentNAME(stu,findNAME,Max))!=-1)
{
printf("查找结果如下:
");
printf(" 学号 姓名 年龄 性别 出生年月 地址 电话 E-mail");
printf("%8d %10s %2d %2s %8d %15s %12s %10s",stu[i].ID,stu[i].Name,stu[i].Age,stu[i].Sex,stu[i].Birthday,stu[i].Adress,stu[i].TelNum,stu[i].Email);
}
else
printf("您输入的姓名不存在!
");
break;
default :
printf("选择错误!
");
}
}


void EditInfor(STUDENT stu[],int Max)
{
int i;
int findID;
printf("
请输入学生的学号: ");
scanf("%d",&findID);
if ((i=findStudentID(stu,findID,Max))!=-1)
{
printf("姓 名: %s
",stu[i].Name);
printf("原信息:%8d %2d %2s %8d %15s %12s %10s",stu[i].ID,stu[i].Age,stu[i].Sex,stu[i].Birthday,stu[i].Adress,stu[i].TelNum,stu[i].Email);
printf("
请输入新的学号 (8个字符以内):",i+1);
scanf("%d",&stu[i].ID);
printf("
姓名(10个字符以内):");
scanf("%s",stu[i].Name);
printf("
年龄:");
scanf("%d",&stu[i].Age);
printf("
性别(m或w):");
scanf("%s",&stu[i].Sex);
printf("
出生年月(8位):");
scanf("%d",&stu[i].Birthday);
printf("
地址:");
scanf("%s",&stu[i].Adress);
printf("
电话:");
scanf("%s",&stu[i].TelNum);
printf("
E-mail:");
scanf("%s",&stu[i].Email);
}
else
printf("您输入的学号不存在!
");
}
DEL(STUDENT stu[],int Max,int i)
{
for(;i<Max;i++)
{
stu[i-1].ID=stu[i].ID;
strcpy(stu[i-1].Name,stu[i].Name);
stu[i-1].Age=stu[i].Age;
strcpy(stu[i-1].Sex,stu[i].Sex);
stu[i-1].Birthday=stu[i].Birthday;
strcpy(stu[i-1].Adress,stu[i].Adress);
strcpy(stu[i-1].TelNum,stu[i].TelNum);
strcpy(stu[i-1].Email,stu[i].Email);
}
return(--Max);
}
DelInfor(STUDENT stu[],int Max)
{

int findID,i;
char findNAME[10],select;
printf("*****************请选择删除方式*****************
");
printf("1--按学号删除; 2--按姓名删除
");
printf("************************************************
");
printf("请选择(1--2):");
select=choice();
switch (select)
{
case '1':
printf("
按学号删除
请输入学生的学号: ");
scanf("%d",&findID);
if ((i=findStudentID(stu,findID,Max))!=-1)
DEL(stu,Max,i);
else
printf("您输入的学号不存在!
");
break;
case '2':
printf("
按姓名删除
请输入学生的姓名: ");
scanf("%s",&findNAME);
if ((i=findStudentNAME(stu,findNAME,Max))!=-1)
DEL(stu,Max,i);
else
printf("您输入的姓名不存在!
");
break;
default :
printf("选择错误!
");

}
}

SortInforMenu(STUDENT stu[],int Max)
{
char select;
printf("*****************请选择排序方式*****************
");
printf("1--按学号排序; 2--按姓名排序
");
printf("************************************************
");
printf("请选择(1--2):");
select=choice();
if (select=='1'||select=='2')
SortInfor(stu,Max,select);
else
printf("选择错误!
");

}



SortInfor(STUDENT stu[],int Max,char i)
{
STUDENT student;
int j=0,k,l=0;
if(i=='1')
{
for(k=0;j<Max;j++)
for(;k<Max-j-1;k++)
{
if(stu[k].ID>stu[k+1].ID)
{
student.ID=stu[k+1].ID;
strcpy(student.Name,stu[k+1].Name);
student.Age=stu[k+1].Age;
strcpy(student.Sex,stu[k+1].Sex);
student.Birthday=stu[k+1].Birthday;
strcpy(student.Adress,stu[k+1].Adress);
strcpy(student.TelNum,stu[k+1].TelNum);
strcpy(student.Email,stu[k+1].Email);
stu[k+1].ID=stu[k].ID;
strcpy(stu[k+1].Name,stu[k].Name);
stu[k+1].Age=stu[k].Age;
strcpy(stu[k+1].Sex,stu[k].Sex);
stu[k+1].Birthday=stu[k].Birthday;
strcpy(stu[k+1].Adress,stu[k].Adress);
strcpy(stu[k+1].TelNum,stu[k].TelNum);
strcpy(stu[k+1].Email,stu[k].Email);
stu[k].ID=student.ID;
strcpy(stu[k].Name,student.Name);
stu[k].Age=student.Age;
strcpy(stu[k].Sex,student.Sex);
stu[k].Birthday=student.Birthday;
strcpy(stu[k].Adress,student.Adress);
strcpy(stu[k].TelNum,student.TelNum);
strcpy(stu[k].Email,student.Email);
}
printf("
学号 姓名 年龄 性别 出生年月 地址 电话 E-mail
");
for(i=0;i<Max;i++)
printf("%8d %10s %2d %2s %8d %15s %12s %10s",stu[i].ID,stu[i].Name,stu[i].Age,stu[i].Sex,stu[i].Birthday,stu[i].Adress,stu[i].TelNum,stu[i].Email);
printf("
");
}
}
else if(i=='2')
{
for(k=0;j<Max;j++)
for(;k<Max-j-1;k++)
{
if(strcmp(stu[k].Name,stu[k+1].Name)>0)
{
student.ID=stu[k+1].ID;
strcpy(student.Name,stu[k+1].Name);
student.Age=stu[k+1].Age;
strcpy(student.Sex,stu[k+1].Sex);
student.Birthday=stu[k+1].Birthday;
strcpy(student.Adress,stu[k+1].Adress);
strcpy(student.TelNum,stu[k+1].TelNum);
strcpy(student.Email,stu[k+1].Email);
stu[k+1].ID=stu[k].ID;
strcpy(stu[k+1].Name,stu[k].Name);
stu[k+1].Age=stu[k].Age;
strcpy(stu[k+1].Sex,stu[k].Sex);
stu[k+1].Birthday=stu[k].Birthday;
strcpy(stu[k+1].Adress,stu[k].Adress);
strcpy(stu[k+1].TelNum,stu[k].TelNum);
strcpy(stu[k+1].Email,stu[k].Email);
stu[k].ID=student.ID;
strcpy(stu[k].Name,student.Name);
stu[k].Age=student.Age;
strcpy(stu[k].Sex,student.Sex);
stu[k].Birthday=student.Birthday;
strcpy(stu[k].Adress,student.Adress);
strcpy(stu[k].TelNum,student.TelNum);
strcpy(stu[k].Email,student.Email);
}
}

printf("
姓名 学号 年龄 性别 出生年月 地址 电话 E-mail
");
for(;l<Max;l++)
printf("%10s %8d %2d %2s %8d %15s %12s %10s",stu[l].Name,stu[l].ID,stu[l].Age,stu[l].Sex,stu[l].Birthday,stu[l].Adress,stu[l].TelNum,stu[l].Email);
printf("
");
}
}

Save(STUDENT stu[],int Max)
{
int i=0 ;
FILE *fp;
if((fp=fopen("stu.txt","w+"))==NULL)
{
printf("ERROR!");
exit(0);
}
for(;i<Max;i++)
{
fprintf(fp,"%d ",stu[i].ID);
fprintf(fp,"%s ",stu[i].Name);
fprintf(fp,"%d ",stu[i].Age);
fprintf(fp,"%s ",stu[i].Sex);
fprintf(fp,"%d ",stu[i].Birthday);
fprintf(fp,"%s ",stu[i].Adress);
fprintf(fp,"%s ",stu[i].TelNum);
fprintf(fp,"%s ",stu[i].Email);
}
fclose(fp);
printf("OK!");
}




int main(int argc, char *argv[])
{
char select;
STUDENT stu[MAX_NUM];
int current_number=0;
select=0;
while(select!='0')
{
system("cls");

DispMainMenu();
select=choice();

switch(select)
{
case '0':
printf("
您选择的是退出测试!
");
_beep(300,400);
continue;
case '1':
printf("
您选择的是信息录入!
");
current_number=InforInput(stu,current_number);
break;
case '2':
printf("
您选择的是信息修改!
");
EditInfor(stu,current_number);
break;
case '3':
printf("
您选择的是信息查询!
");
QueryInfor(stu,current_number);
break;
case '4':
printf("
您选择的是删除信息!
");
DelInfor(stu,current_number);
break;
case '5':
printf("
您选择的是排序信息!
");
SortInforMenu(stu,current_number);
break;
default:
printf("
选择错误!请重新选择!
");
}
system("PAUSE");
}
return (0);
Save(stu,current_number);
}

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

struct BOOK
{
int id,usr[10],total,store,days[10];
char name[31],author[21];
}books[100];
/*上面是结构体的定义,用于存放书籍及借书的信息。*/

void page_title(char *menu_item)
{
clrscr();
printf(">>> 图 书 管 理 系 统 <<<\n\n- %s -\n\n",menu_item);
}
/*上面是打印页眉的函数,同时通过参数menu_item,可以显示当前的状态。*/

void return_confirm(void)
{
printf("\n按任意键返回……\n");
getch();
}
/*上面是返回前请求确认的函数,以便在返回前观察结果*/

int search_book(void)
{
int n,i;
printf("请输入图书序号:");
scanf("%d",&i);
for(n=0;n<100;n++)
{
if(books[n].id==i)
{
printf("书名:%s\n",books[n].name);
printf("作者:%s\n",books[n].author);
printf("存数:%d of ",books[n].store);
printf("%d\n",books[n].total);
return n;
}
}
printf("\n输入错误或无效图书序号.\n");
return -1;
}
/*上面的函数是在数组中找到图书号匹配的记录,显示其信息并返
回数组下标,如果找不到相应记录则提示错误并返回-1。*/

void book_out(void)
{
int n,s,l,d;
page_title("借阅图书");
if((n=search_book())!=-1&&books[n].store>0)
{
printf("请输入借书证序号:");
scanf("%d",&s);
printf("请输入可借天数:");
scanf("%d",&d);
for(l=0;l<10;l++)
{
if(books[n].usr[l]==0)
{
books[n].usr[l]=s;
books[n].days[l]=d;
break;
}
}
books[n].store--;
}
if(n!=-1&&books[n].store==0) printf("此书已经全部借出.\n");
return_confirm();
}
/*上面是借书的函数,首先调用找书函数*/

void book_in(void)
{
int n,s,l;
page_title("归还图书");
if((n=search_book())!=-1&&books[n].store<books[n].total)
{
printf("借阅者图书证列表:\n");
for(l=0;l<10;l++)
if (books[n].usr[l]!=0)
printf("[%d] - %d天\n",books[n].usr[l],books[n].days[l]);
printf("请输入借书证序号:");
scanf("%d",&s);
for(l=0;l<10;l++)
{
if(books[n].usr[l]==s)
{
books[n].usr[l]=0;
books[n].days[l]=0;
break;
}
}
books[n].store++;
}
if(n!=-1&&books[n].store==books[n].total)
printf("全部入藏.\n");
return_confirm();
}

void book_add(void)
{
int n;
page_title("注册新书");
for(n=0;n<100;n++)
if(books[n].id==0) break;
printf("序号:");
scanf("%d",&books[n].id);
printf("书名:");
scanf("%s",&books[n].name);
printf("作者:");
scanf("%s",&books[n].author);
printf("数量:");
scanf("%d",&books[n].total);
books[n].store=books[n].total;
return_confirm();
}
void book_del(void)
{
int n;
page_title("注销旧书");
if((n=search_book())!=-1) books[n].id=0;
printf("该书已注销.\n");
return_confirm();
}

void main(void)
{
menu: page_title("操作选单");
printf("请用数字键选择操作\n\n");
printf("1 借阅图书\n2 归还图书\n\n");
printf("3 注册新书\n4 注销旧书\n\n");
printf("\n0 退出\n");
switch(getch())
{
case '1' : book_out();break;
case '2' : book_in();break;
case '3' : book_add();break;
case '4' : book_del();break;
case '0' : exit(0);
}
goto menu;
}
{
int n;
page_title("广?症慕");
if((n=search_book())!=-1) books[n].id=0;
printf("乎慕厮广?.\n");
return_confirm();
}

void main(void)
{
menu: page_title("荷恬佥汽");
printf("萩喘方忖囚佥夲荷恬\n\n");
printf("1 処堋夕慕\n2 拷珊夕慕\n\n");
printf("3 广过仟慕\n4 广?症慕\n\n");
printf("\n0 曜竃\n");
switch(getch())
{
case '1' : book_out();break;
case '2' : book_in();break;
case '3' : book_add();break;
case '4' : book_del();break;
case '0' : exit(0);
}
goto menu;
}

http://tieba.baidu.com/f?kz=17682927
自己看

#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
#define N sizeof(struct book)
#define PT "%-5d %10s %6s %6s %8s %3d \n",p->num,p->name,p->where,p->author,p->pub,p->count
struct book /*图书信息*/
{
int num; /*书号*/
char name[10]; /*书名*/
char where[10]; /*所在书库*/
char author[15]; /*作者*/
char pub[20]; /*出版社*/
int count; /*数量*/
struct book *next;
};
/*输出模块*/
void print(struct book *p0)
{
struct book *p;
p=p0->next;
printf("\n\n\t\t^^^^^^^^^^^^^^图书信息表^^^^^^^^^^^^^^");
printf("\n\n图书编号---图书名称---所在书库----作者----出版社---数量\n");
while(p!=NULL)
{
printf(PT);
p=p->next;
}
getch();
}
/*输入模块*/
struct book *creat()
{
struct book *head,*p1,*p2;
int i=0;
head=p2=(struct book *)malloc(N);
head->next=NULL;
printf("\n\n\t\t录入图书信息");
printf("\n\t---------------------------------------");
while(1)
{ p1=(struct book *)malloc(N);
printf("\n 请输入图书编号(书号为0结束): ");
scanf("%d",&p1->num);
if(p1->num!=0)
{
printf("\n\n书名 所在书库 作者 出版社 图书数量\n");
scanf("%s%s%s%s%d",p1->name,p1->where,p1->author,p1->pub,&p1->count);
p2->next=p1;
p2=p1;
i++;
}
else
break;

}
p2->next=NULL;
free(p1);
printf("\n\t\t----------------------------------------");
printf("\n\t\t %d 种书录入完毕",i);
getch();
return head;
}
/*查找模块*/
void find(struct book *p0)
{
char name[10];
int flag=1;
struct book *p;
p=p0->next;
printf("请输入要查找的书名:\n");
scanf("%s",name);
for(p=p0;p;p=p->next)
if(strcmp(p->name,name)==0)
{
printf("\n\n图书编号---图书名称---所在书库----作者----出版社---数量\n");
printf(PT);
flag=0;
break;
}
if(flag) printf("\n 暂无此图书信息\n");
getch();

}
/*删除模块*/
void del(struct book *p0)
{
char name[10];
int flag=1;
struct book *p;
p=p0;
printf("请输入要删除的书名:\n");
scanf("%s",name);
while(p!=NULL)
{
if(strcmp(p->name,name)==0)
{
p0->next=p->next; /*后续节点连接到前驱节点之后*/
free(p);
printf("\t该书资料已删除.");
flag=0;
break;
}
p0=p;
p=p->next;
}
if(flag) printf("\n\t无此图书信息。");
getch();

}
/*增加模块*/
void insert(struct book *p0)
{
struct book *p;
p=(struct book *)malloc(N);
while(1)
{
printf("\n 请输入要增加的图书编号(书号为0 退出): ");
scanf("%d",&p->num);
if(p->num!=0)
{
if(p0->next!=NULL&&p0->next->num==p->num) /*找到重号*/
{
p=p->next;
free(p);
printf("\t该书已存在");
}
else
{printf("\n\n书名 所在书库 作者 出版社 图书数量\n");
scanf("%s%s%s%s%d",p->name,p->where,p->author,p->pub,&p->count);
p->next=p0->next;
p0->next=p;
printf("\t已成功插入.");
}
}
else
break;

}
getch();
}
/*修改模块*/
void modify(struct book *p0)
{
char name[10];
int flag=1;
int choice;
struct book *p;
p=p0->next;
printf("请输入要修改的书名:\n");
scanf("%s",name);
while(p!=NULL&&flag==1)
{
if(strcmp(p->name,name)==0)
{
printf("\n\t请选择要修改的项:");
printf("\n\t 1.修改图书编号\n");
printf("\n\t 2.修改图书所在书库\n");
printf("\n\t 3.修改图书作者\n");
printf("\n\t 4.修改图书出版社\n");
printf("\n\t 5.修改图书库存量\n");
scanf("%d",&choice);
switch(choice)
{
case 1: { printf("\n 请输入新的图书编号:");

scanf("%d",p->num); break;
}
case 2: { printf("\n 请输入新的图书书库:");

scanf("%s",p->where); break;
}
case 3: { printf("\n 请输入新的图书作者:");

scanf("%s",p->author); break;
}
case 4: {printf("\n 请输入新的图书出版社:");

scanf("%s",p->pub); break;
}
case 5: {printf("\n 请输入新的图书库存量:");

scanf("%d",p->count); break;
}
}
printf("\n\t该项已成功修改。\n\t 新的图书信息:");
printf("\n\n图书编号---图书名称---所在书库----作者----出版社---数量\n");
printf(PT);
flag=0;
}
p0=p;
p=p0->next;
}
if(flag) printf("\n\t暂无此图书信息。");
getch();
}
/*读文件*/
struct book *read_file()
{
int i=0;
struct book *p,*p1,*head=NULL;
FILE *fp;
if((fp=fopen("library.txt","rb"))==NULL)
{printf("\n\n\n\n\n \t********库文件不存在,请创建!**********");
getch();
return NULL;
}
head=(struct book *)malloc(N);
p1=head;
head->next=NULL;
printf("\n 已有图书信息:");
printf("\n\n图书编号---图书名称---所在书库----作者----出版社---数量\n");
while(!feof(fp))
{
p=(struct book *)malloc(N); /*开辟空间以存放的取得信息*/
while(fscanf(fp,"%d%s%s%s%s%d",&p->num,p->name,p->where,p->author,p->pub,&p->count)!=EOF)
{
printf(PT);
i++;
}
p1->next=p;
p1=p;
}
p1->next=NULL;
fclose(fp);
printf("\n 共种%d 图书信息",i);
printf("\n\n\n 文件中的信息以正确读出。按任意键返回。");
getch();
return (head);
}
/*保存文件*/
void save(struct book *head)
{
FILE *fp;
struct book *p;
fp=fopen("library.txt","wb"); /*以只写方式打开二进制文件*/
if(fp==NULL) /*打开文件失败*/
{
printf("\n=====>打开文件失败!\n");
getch();
return ;
}
else
for(p=head->next;p!=NULL;p=p->next)
fprintf(fp,"%d %s %s %s %s %d\n",p->num,p->name,p->where,p->author,p->pub,p->count);
fclose(fp);
printf("\n\t保存文件成功!\n");
}
void main()
{
struct book *head=NULL;
int choice=1;
head=read_file();
if(head==NULL)
{
printf("\n\t\t**********");
getch();
head=creat();
}
do
{
system("cls");
printf("\t\t----------Welcome---------\n");
printf("\n\n\t欢迎您,图书管理员.\n");
printf("\n\n\n\n\n");
printf("\n\t 请选择:");
printf("\n\t 1.查询图书信息\n");
printf("\n\t 2.修改图书信息\n");
printf("\n\t 3.增加图书信息\n");
printf("\n\t 4.删除图书信息\n");
printf("\n\t 5.显示所有图书信息\n");
printf("\n\t 0.退出系统\n");
scanf("%d",&choice);
switch(choice)
{
case 1: find(head); break;
case 2: modify(head); break;
case 3: insert(head); break;
case 4: del(head); break;
case 5: print(head); break;
case 0: system("cls");
printf("\n\n\n\n\n\t^^^^^^^^^^谢谢使用,再见^^^^^^^^^^!\n\n");
break;
}
}while(choice!=0);
save(head);
}

http://wenku.baidu.com/view/df9fe8c72cc58bd63186bdfc.html

图书管理系统代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

struct BOOK
{
int id,usr[10],total,store,days[10];
char name[31],author[21];
}books[100];
/*上面是结构体的定义,用于存放书籍及借书的信息。*/

void page_title(char *menu_item)
{
clrscr();
printf(">>> 图 书 管 理 系 统 <<<\n\n- %s -\n\n",menu_item);
}
/*上面是打印页眉的函数,同时通过参数menu_item,可以显示当前的状态。*/

void return_confirm(void)
{
printf("\n按任意键返回……\n");
getch();
}
/*上面是返回前请求确认的函数,以便在返回前观察结果*/

int search_book(void)
{
int n,i;
printf("请输入图书序号:");
scanf("%d",&i);
for(n=0;n<100;n++)
{
if(books[n].id==i)
{
printf("书名:%s\n",books[n].name);
printf("作者:%s\n",books[n].author);
printf("存数:%d of ",books[n].store);
printf("%d\n",books[n].total);
return n;
}
}
printf("\n输入错误或无效图书序号.\n");
return -1;
}
/*上面的函数是在数组中找到图书号匹配的记录,显示其信息并返
回数组下标,如果找不到相应记录则提示错误并返回-1。*/

void book_out(void)
{
int n,s,l,d;
page_title("借阅图书");
if((n=search_book())!=-1&&books[n].store>0)
{
printf("请输入借书证序号:");
scanf("%d",&s);
printf("请输入可借天数:");
scanf("%d",&d);
for(l=0;l<10;l++)
{
if(books[n].usr[l]==0)
{
books[n].usr[l]=s;
books[n].days[l]=d;
break;
}
}
books[n].store--;
}
if(n!=-1&&books[n].store==0) printf("此书已经全部借出.\n");
return_confirm();
}
/*上面是借书的函数,首先调用找书函数*/

void book_in(void)
{
int n,s,l;
page_title("归还图书");
if((n=search_book())!=-1&&books[n].store<books[n].total)
{
printf("借阅者图书证列表:\n");
for(l=0;l<10;l++)
if (books[n].usr[l]!=0)
printf("[%d] - %d天\n",books[n].usr[l],books[n].days[l]);
printf("请输入借书证序号:");
scanf("%d",&s);
for(l=0;l<10;l++)
{
if(books[n].usr[l]==s)
{
books[n].usr[l]=0;
books[n].days[l]=0;
break;
}
}
books[n].store++;
}
if(n!=-1&&books[n].store==books[n].total)
printf("全部入藏.\n");
return_confirm();
}

void book_add(void)
{
int n;
page_title("注册新书");
for(n=0;n<100;n++)
if(books[n].id==0) break;
printf("序号:");
scanf("%d",&books[n].id);
printf("书名:");
scanf("%s",&books[n].name);
printf("作者:");
scanf("%s",&books[n].author);
printf("数量:");
scanf("%d",&books[n].total);
books[n].store=books[n].total;
return_confirm();
}
void book_del(void)
{
int n;
page_title("注销旧书");
if((n=search_book())!=-1) books[n].id=0;
printf("该书已注销.\n");
return_confirm();
}

void main(void)
{
menu: page_title("操作选单");
printf("请用数字键选择操作\n\n");
printf("1 借阅图书\n2 归还图书\n\n");
printf("3 注册新书\n4 注销旧书\n\n");
printf("\n0 退出\n");
switch(getch())
{
case '1' : book_out();break;
case '2' : book_in();break;
case '3' : book_add();break;
case '4' : book_del();break;
case '0' : exit(0);
}
goto menu;
}
{
int n;
page_title("广?症慕");
if((n=search_book())!=-1) books[n].id=0;
printf("乎慕厮广?.\n");
return_confirm();
}

void main(void)
{
menu: page_title("荷恬佥汽");
printf("萩喘方忖囚佥夲荷恬\n\n");
printf("1 処堋夕慕\n2 拷珊夕慕\n\n");
printf("3 广过仟慕\n4 广?症慕\n\n");
printf("\n0 曜竃\n");
switch(getch())
{
case '1' : book_out();break;
case '2' : book_in();break;
case '3' : book_add();break;
case '4' : book_del();break;
case '0' : exit(0);
}
goto menu;
}


兰州工业学院的图书馆条件如何?
图书馆一楼设有学术报告厅,二楼设有共产党员学习空间,陈列有党建学习资料,可容纳50名党员学习和组织活动,面向全校基层党组织和学生开放。二到五楼设有8个图书借阅室和阅览室,采用借阅藏一体化管理模式,一到四楼设有8个自习室,四楼设有二个电子阅览室,可为学生开展和提供数字资源阅览、课程设计、毕业设计、信息素...

关于课程设计心得5篇集锦
虽说上过数据库上过管理信息系统等相关的课程,但是没有亲身经历过相关的设计工作细节。这次实习证实提供了一个很好的机会。 通过这次课程设计发现这其中需要的很多知识我们没有接触过,去图书馆查资料的时候发现我们前边所学到的仅仅是皮毛,还有很多需要我们掌握的东西我们根本不知道。同时也发现有很多已经学过的东西我们...

上海外国语大学贤达经济人文学院的教学环境如何?
课程设置:课程设计覆盖语言、商科、艺术学、教育学及法学等多个领域,旨在培养学生的综合素质和专业技能。特别是全英语或双语授课的课程,有效地提升了学生的国际视野和语言能力。学生发展与支持服务 学生支持:学院提供全方位的学生服务,包括学业咨询、心理健康支持、职业规划等,帮助学生在校期间顺利完成学业...

课程设计总结
课程设计过程是一种经历,更是一种锻炼。期间我意识到自己的知识面是多么狭隘,我需在图书馆翻阅大量的资料来进一步增加自己知识贮备和建立一个完备的建设项目管理与规划的体系。同时这也是我对建设项目管理与规划理论得到了进一步学习和理解,例如招投标法中的具体时间规定这是以前未曾接触过的,通过编制招标活动横道图,...

课程设计对你有何帮助
通过两周的课程设计,我受益匪浅。最大的收获是能够独立完成器件的设计。当然,在设计的过程中我也遇到很多问题,但通过和老师同学的交流探讨,加上自己上网和图书馆查找相关资料,最终顺利解决。这是我第一次做课程设计,以前都是被动的学书本上的理论知识,这次做课程设计时要求将所学理论知识灵活运用。

数据结构课程设计里有个图书馆信息管理系统的数据库文件怎么做啊?_百 ...
数据结构课程设计里有个图书馆信息管理系统的数据库文件怎么做啊? 最好是有做好的样本看看,要不说明一下用什么软件做?就是包括书号,作者什么的,还有索引文件……没学数据库,比较混乱啊,强人遇到帮个忙吧,不胜感激。... 最好是有做好的样本看看,要不说明一下用什么软件做?就是包括书号,作者什么的,还有索引...

求软件工程课程设计一份
《软件工程课程设计资料》百度网盘资源免费下载 链接:https:\/\/pan.baidu.com\/s\/13kMSLN5gQbxBoqggkGkZ-Q ?pwd=zxcv 提取码:zxcv 软件工程课程设计资料|学生作品参考|Axure软件|Axure参考素材|2018-2019第一学期软件工程教室安排-分班级安排表.xls|05-软件工程课程设计评分标准.docx|02-软件工程课程...

课程设计总结范文精选
课程设计来说又是势在必行的,所以我跟郑光顺跑到图书馆,恨恨地找了一番,终于借到与这次课程设计有关的六本参考资料书,拿回来后一本一本地看下去,把槽轮有关的内容一一浏览,结果,令我们欣喜的是这槽轮机构的各种参数都被罗列出来了,而且还有一道例题,按照例题的思路很快地设计出了槽轮机构,即送料机构设计...

数据库课程设计心得3篇
经过大概2个多星期的奋斗,我完成了我的数据库课程设计--基于.net数据集的图书馆管理系统。并最后非常荣幸的获得了大赛的一等奖以及以及新技术应用奖。 与其临渊羡鱼,不如退而结网。这次数据库课程设计给我的最大的印象就是如果自己有了兴趣,就动手去做,困难在你的勇气和毅力下是抬不了头的。从做这个数据库开始...

课程设计致谢
最后再一次感谢所有在设计中帮助过我的良师益友和同学。 课程设计致谢3 经过两个星期的努力,终于完成了注射成型模具的设计。在上课的时候,老师大概和我们讲了一下模具设计的情况,刚开始对模具设计还一无所知。但由于时间紧迫,在接到老师的任务书之后,马上去图书馆查找大量的资料,仔细分析任务书的要求和模具设计中的...

广宁县18697395892: 图书信息管理系统设计 c语言 -
弘独甘露: 高级语言程序设计(2)课程设计 一程序设计说明书【设计题目】图书馆借阅管理【问题描述】图书馆,适合用C++面向对象的功能来描述.图书馆管理系统分为借书、还书、图书管理和读者服务等四个部分.设计一个读者类Reader,记录每个...

广宁县18697395892: C语言写图书管理系统 -
弘独甘露: 有一定的技术含量,图书管理系统 涉及 插入 修改 删除 查找 等操作,要掌握相关操作的算法,要选择合适的数据结构,数据结构对算法有影响.

广宁县18697395892: 求用C语言设计的图书管理系统 -
弘独甘露: #include<stdio.h> #include<string.h> #include<conio.h> #include<stdlib.h> #include<ctype.h> #define STACK_INIT_SIZE 10 #define OK 1 #define TRUE 1 #define FALSE 0 #define ERROR 0struct student /*定义学生类型,用于存放借出...

广宁县18697395892: 用C语言编写一个简单的图书管理小程序 -
弘独甘露: 源代码如下:#include<iostream> #include<iomanip> #include<string> #include<fstream>#include<stdio.h> using namespace std; const int maxb=10000; //最多的图书 class book//图书类 { int tag; //删除标记1:已删0:未删 int number; //isbn书...

广宁县18697395892: c语言课程设计 小型图书管理系统设计 -
弘独甘露: 没有按价格排序,自己加,可以运行 #include <stdio.h> #include <stdlib.h> #include <conio.h>struct BOOK { int id,usr[10],total,store,days[10]; char name[31],author[21]; }books[100]; /*上面是结构体的定义,用于存放书籍及借书的信息.*/void ...

广宁县18697395892: 跪求一个C语言图书信息管理系统的课程设计 -
弘独甘露: 通过测试!#include<stdio.h>#include<string.h>#include<stdlib.h>#include<conio.h>#define MAX 100 struct Student { int num;/*登录号*/ char name[100];/*书名*/ char author[100];/*作者名*/ char fn[100];/*分类号*/ char place[100];/*出版单位*...

广宁县18697395892: C语言课程设计图书管理系统的实验报告求这篇报告,在网上找了好久,
弘独甘露: 一.实验目的: 通过对一个具体实例——图书管理系统的实现,系统地理解并掌握软件工程面向对象方法学. 二.问题描述: 在图书管理系统中,要为每个借阅者建立一个账...

广宁县18697395892: C语言图书管理系统 -
弘独甘露: 原发布者:天使小白很黑图书管理系统设计图书管理信息包括:图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号等功能描述:1.新进熟土基本信息地输入2.图书基本信息地查询3.对撤消图书信息地删除4.为借书人办理注...

广宁县18697395892: c语言课程设计:图书管理系统设计的基本思路是什么?
弘独甘露: 最近刚帮朋友做过一个,思路嘛~ 先要定义一个图书的类,类里有图书的基本信息的数据,对图书进行操作的函数. 主函数用switch语句实现菜单的分支选择操作,用goto实现菜单的循环~

广宁县18697395892: 怎样用C语言制作图书馆管理系统 -
弘独甘露: 这个是自己写的 注释很清楚地 有什么不清楚的问我#include<stdio.h>#include<math.h>#include<string.h>#include<stdlib.h> struct books_list { char author[20]; /*作者名*/ char bookname[20]; /*书名*/char publisher[20]; /*出版单位*/ char pbtime...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网