搜档网
当前位置:搜档网 › 图书信息管理系统课程设计报告--C语言程序设计

图书信息管理系统课程设计报告--C语言程序设计

图书信息管理系统课程设计报告--C语言程序设计
图书信息管理系统课程设计报告--C语言程序设计

图书信息管理系统课程设计报告--C语言程序设计

德州学院计算机系

课程设计报告

实习名称程序设计课程设计

设计题目图书信息管理系统

实习时间2010.06.27-2010.07.04

专业班级网络工程

指导老师

教学单位(盖章)

小组分工情况:

二O一O年七月五日

课程设计报告正文内容及格式要求:

1、正文部分主要包括:选题背景、论点或方案论证、过程(设计或实验)论述、结果分析、结论或总结。

2、标题:题目用小二号黑体字(加黑),居中;副标题用三号黑体字,紧挨正标题下居中,文字前加破折号。英文题目为18磅加粗Times New Roman字,副标题为16磅加粗Times New Roman字。

3、课程设计报告格式要求:

一级标题用小三号黑体字;

二级标题用四号黑体字;

三级标题用小四号黑体字;

正文用宋体小四号字(英文用12磅Times New Roman字),采用1.5倍行距,标准字符间距:

页码一律用小5号字标明。

4、课程设计报告撰写要求:

(1)文字通顺,语言流畅,能将设计过程表述清楚。

(2)图表整洁,布局合理,须按国家规定的绘图标准绘制。

(3)报告字数不少于3千字。

C语言程序设计报告

---图书管理系统

一、实验准备

做系统前,首先,自己详细看了《C程序设计教程》(教科书)的第十章《文件》,基本自学会了文件的相关内容,理解了相关函数的用法和作用;另,上网查询了很多相关资料,还有找了很多相关的系统,都详细的看了一遍,加深了对C的理解以及对文件的相关内容进一步理解。学习了C语言的内容,图书信息管理系统有助于C语言学习的进一步巩固,在本系统可以增强对指针、数组、文件、函数等基本知识的进一步理解。另外图书信息管理系统也是学校常用的基本系统之一,它有助于学校对图书馆书籍的基本管理。

二、功能简介

图书信息管理系统是对图书信息的基本管理,它包括:图书信息的输入、图书信息的修改及删除、图书信息的查询、图书信息的添加、图书信息的浏览。

使用模块化编程的方法每项功能有一个或多个函数组合来完成.

三、系统与性环境

系统可以在MicrosoftVisualC++6.0软件运行,硬件基本无要求,现在的计算机基本都可以运行该系统。

四、功能划分及详细说明

主要算法的设计:

(1) 主函数的算法设计

首先,运行程序,进入菜单,然后选择操作(运用swith

语句),调用各子函数。在返回操作中运用while 语句进行控制返回菜单。

(2) 各子函数的算法设计

1、图书信息的输入函数

函数

真2、图书信息的修改

3、图书信息的查询

void search()选择查询方式,1按书号查询,2按书名查询,然后定位,再调用输出函数;

4、图书信息的浏览

首先,输出所有图书的信息,并输出图书记录数,然后调用辅助函数进行菜单选择,操作完成后返回主菜单。

5、图书信息的添加

首先,从文件中调用函数读入函数,再输入要添加数,然后添加图书信息,并保存。

上机调试过程:

在调试过程中出现了许多的错误!特别是在查询、修改删除这2个函数的调上花费了很多时间,主要是文件的写入与读出以及菜单调试的问题,还有建立新的链接也出现问题,说明自己对程序的执行过程理解不够深刻。

五、源程序

#include

#include

#include

#include

#define LEN sizeof(stu)

typedef struct student{

long number;

char name[10];

char sex[3];

int age;

float chinese;

float math;

float english;

float sum;

float average;

struct student *next;

}stu;

book *creat(void);

book *changes(book *head);

book *modify(book *head,long num);

book *del(book *head,long num);

book *insert(book *head,book *stud); book *input(book *head,book *p1);

void sort(book *head);

void total_average_sort(book *head); void chinese_sort(book *head);

void math_sort(book *head);

void english_sort(book *head);

void print(book *head);

void Statistics(book *head);

void search(book *head);

void numsearch(book *head,long num); void namesearch(book *head,char name[]); int n;

book *creat(void)

{

book *head,*p1,*p2;

n=0;

p1=p2=(book *)malloc(LEN);

printf("请输入图书信息!\n");

head=NULL;

p1=input(head,p1);

while(p1->number!=0)

{

n=n+1;

if(n==1) head=p1;

else p2->next=p1;

p2=p1;

p1=(book *)malloc(LEN);

p1=input(head,p1);

}

p2->next=NULL;

return(head);

}

book *input(book *head,book *p1)/*输入图书的信息*/

{

int i,f,k;

book *p2;

loop:printf("图书号(为整数,输入0时返回上一级):");

scanf("%ld",&p1->number);

if(p1->number<0){

printf("图书号不能为负数,请重新输入!\n");

goto loop;

}

else{

if(p1->number==0)

return(p1);

else{

p2=head;

f=0;

for(i=1;i<=n;i++){

if(p1->number==p2->number)

{f=1;break;}

p2=p2->next;}

}

if(f)

{printf("图书不能重复,请重新输入!\n");goto loop;}

}

printf("书名:");

scanf("%s",p1->name);

loop1:printf("类别: 1.文科 2.理科 \n");

printf("请选择类别:");

scanf("%d",&k);

switch(k)

{

case 1:strcpy(p1->sex,"文科");break;

case 2:strcpy(p1->sex,"理科");break;

default:printf("类别只能是“文科”或“理科”,请重新输入!\n");goto loop1;}

printf("存期:");

scanf("%d",&p1->age);

while(p1->age<0||p1->age>120){

printf("你输入的存期不符合实际情况,请重新输入!\n");

printf("存期:");

scanf("%d",&p1->age);

}

printf("章数:");

scanf("%f",&p1->chinese);

while(p1->chinese<0||p1->chinese>100){

printf("你输入的章数不符合实际情况,请重新输入!\n");

printf("章数:");

scanf("%f",&p1->chinese);}

printf("页数:");

scanf("%f",&p1->math);

while(p1->math<0||p1->math>100){

printf("你输入的页数不符合实际情况,请重新输入!\n");

printf("页数:");

scanf("%f",&p1->math);}

printf("阅读次数:");

scanf("%f",&p1->english);

while(p1->english<0||p1->english>100){

printf("你输入的阅读次数不符合实际情况,请重新输入!\n");

printf("阅读次数:");

scanf("%f",&p1->english);}

p1->sum=p1->chinese+p1->math+p1->english;

p1->average=p1->sum/3;

return(p1);

}

void search(book *head)

{

int k;

long num;

char name[10];

if(n==0)

{printf("数据库为空,没有图书的记录!\n");return;}

else{

do{

printf("1. 按书号查找 2. 按书名查找 0. 返回上一级\n");

printf("请选择:");

scanf("%d",&k);

switch(k)

{

case 1:do{

printf("书号(输入0时跳出按书号查找):");

scanf("%ld",&num);

if(num==0)break;

else{

if(num>0)

numsearch(head,num);

else

printf("输入错误,请重新选择!\n");} }while(1);

break;

case 2:do{

printf("书名(输入0时跳出按书名查找):");

scanf("%s",name);

printf("书号\t书名\t类别\t存期\t章数\t页数\t阅读次数\t总次数\t平均次数\n");

namesearch(head,name);

}while(strcmp(name,"0")!=0);

break;

case 0:break;

default:printf("输入错误,请重新选择!\n");

}

}while(k!=0);

}

}

void numsearch(book *head,long num)

{

book *p1;

p1=head;

while(p1!=NULL)

{

if(num==p1->number){

printf("书号\t书名\t类别\t存期\t章数\t页数\t阅读次数\t总次数\t平均次数\n");

printf("%ld\t%s\t%s\t%d\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n",p1->number, p1->name,p1->sex,p1->age,p1->chinese,p1->math,p1->english,p1->sum,p1 ->average);

return;}

p1=p1->next;

}

printf("没有找到你要查找的图书信息!\n");

}

void namesearch(book *head,char name[])

{

int a=1;

book *p1;

p1=head;

while(p1!=NULL)

{

if(strcmp(name,p1->name)==0){

printf("%ld\t%s\t%s\t%d\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n",p1->number, p1->name,p1->sex,p1->age,p1->chinese,p1->math,p1->english,p1->sum,p1 ->average);a=0;}

p1=p1->next;

}

if(a)

printf("没有找到你要查找的图书信息!\n");

}

book *changes(book *head)

{

book *p1;

int k;

long num;

do{

printf("1. 修改 2. 删除 3. 插入 0. 返回上一级\n");

printf("请选择:");

scanf("%d",&k);

switch(k)

{

case 1:do{

if(n==0){

printf("数据库为空,没有图书的记录!\n");break;}

else{

printf("请输入图书的书号(书号应为整数,输入0时跳出修改数据):");

scanf("%ld",&num);

if(num==0)break;

else{

if(num>0)

head=modify(head,num);

else

printf("书号不能为负数,请重新输入!\n");} }

}while(1);

break;

case 2:do{

if(n==0){printf("数据库为空,没有图书信息!\n");break;} else{

printf("请输入要删除的图书的书号(书号应为整数,输入0时跳出删除元素):");

scanf("%ld",&num);

if(num==0)break;

else{

if(num>0)

head=del(head,num);

else

printf("书号不能为负数,请重新输入!\n");} }

}while(1);

break;

case 3:printf("请输入图书信息!\n");

p1=(book *)malloc(LEN);

p1=input(head,p1);

while(p1->number!=0)

{head=insert(head,p1);

print(head);

printf("请输入图书信息!\n");

p1=(book *)malloc(LEN);

p1=input(head,p1);

}

break;

case 0:break;

default:printf("输入错误,请重新输入!\n");

}

}while(k!=0);

return(head);

}

void sort(book *head)

{

int k;

if(n==0){printf("数据库为空,没有图书记录!\n");return;}

do{

printf("1.按书号排序 2.按总次数和平均次数排序 3.按章数成绩排序 4.按页数排序 5.按阅读次数排序 0.返回上一级\n");

printf("请选择:");

scanf("%d",&k);

switch(k)

{

case 1:print(head);break;

case 2:total_average_sort(head);break;

case 3:chinese_sort(head);break;

case 4:math_sort(head);break;

case 5:english_sort(head);break;

case 0:break;

default:printf("输入错误,请重新输入!\n");

}

}while(k!=0);

}

void total_average_sort(book *head)

{

book *p1,*p2;

int j=0;

float max,k=301;

printf("书号\t书名\t类别\t存期\t章数\t页数\t阅读次数\t总次数\t 平均次数\n");

do{

max=0;

for(p1=head;p1;p1=p1->next)

if(p1->sum>max&&p1->sum

max=p1->sum;

p2=p1;}

k=max;

for(p1=p2;p1;p1=p1->next)

if(p1->sum==max){

printf("%ld\t%s\t%s\t%d\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n",p1->number, p1->name,p1->sex,p1->age,p1->chinese,p1->math,p1->english,p1->sum,p1 ->average);

j++;}

}while(j

}

void chinese_sort(book *head)

{

int j=0;

float k=101,max;

book *p1,*p2;

printf("书号\t书名\t类别\t存期\t章数\t页数\t阅读次数\t总次数\t 平均次数\n");

do{

max=0;

for(p1=head;p1;p1=p1->next)

if(p1->chinese>max&&p1->chinese

max=p1->chinese;

p2=p1;}

k=max;

for(p1=p2;p1;p1=p1->next)

if(p1->chinese==max){

printf("%ld\t%s\t%s\t%d\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n",p1->number, p1->name,p1->sex,p1->age,p1->chinese,p1->math,p1->english,p1->sum,p1 ->average);

j++;}

}while(j

}

void math_sort(book *head)

{

int j=0;

float k=101,max;

book *p1,*p2;

printf("书号\t书名\t类别\t存期\t章数\t页数\t阅读次数\t总次数\t 平均次数\n");

do{

max=0;

for(p1=head;p1;p1=p1->next)

if(p1->math>max&&p1->math

max=p1->math;

p2=p1;}

k=max;

for(p1=p2;p1;p1=p1->next)

if(p1->math==max){

printf("%ld\t%s\t%s\t%d\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n",p1->number, p1->name,p1->sex,p1->age,p1->chinese,p1->math,p1->english,p1->sum,p1 ->average);

j++;}

}while(j

}

void english_sort(book *head)

{

int j=0;

float k=101,max;

book *p1,*p2;

printf("书号\t书名\t类别\t存期\t章数\t页数\t阅读次数\t总次数\t 平均次数\n");

do{

max=0;

for(p1=head;p1;p1=p1->next)

if(p1->english>max&&p1->english

max=p1->english;

p2=p1;}

k=max;

for(p1=p2;p1;p1=p1->next)

if(p1->english==max){

printf("%ld\t%s\t%s\t%d\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n",p1->number, p1->name,p1->sex,p1->age,p1->chinese,p1->math,p1->english,p1->sum,p1

->average);

j++;}

}while(j

}

book *modify(book *head,long num)

{

book *p1;

int k,m;

p1=head;

while(p1!=NULL)

{

if(p1->number==num)

break;

p1=p1->next;

}

if(p1->number==num)

{

do{

printf("1.书名 2.类别 3.存期 4.章数成绩 5.页数6.阅读次数 0.返回上一级\n");

printf("请选择:");

scanf("%d",&k);

switch(k)

{

case 1:printf("书名:");scanf("%s",p1->name);printf("修改成功!\n");break;

case 2:loop2:printf("类别: 1.文科 2. 理科\n");

printf("请选择类别:");

scanf("%d",&m);

switch(m)

{

case 1:strcpy(p1->sex,"文科");break;

case 2:strcpy(p1->sex," 理科");break;

default:printf("类别只能是“文科”或“理科”,请重新输入!\n");goto loop2;}

printf("修改成功!\n");

break;

case 3:printf("存期:");

scanf("%d",&p1->age);

while(p1->age<0||p1->age>120){

printf("你输入的存期不符合实际情况,请重新输入!\n");

printf("存期:");

scanf("%d",&p1->age);

}

printf("修改成功!\n");

break;

case 4:printf("章数成绩:");

scanf("%f",&p1->chinese);

while(p1->chinese<0||p1->chinese>100){

printf("你输入的章数成绩不符合实际情况,请重新输入!\n");

printf("章数成绩:");

scanf("%f",&p1->chinese);}

p1->sum=p1->chinese+p1->math+p1->english;

p1->average=p1->sum/3;

printf("修改成功!\n");

break;

case 5:printf("页数:");

scanf("%f",&p1->math);

while(p1->math<0||p1->math>100){

printf("你输入的页数不符合实际情况,请重新输入!\n");

printf("页数:");

scanf("%f",&p1->math);}

p1->sum=p1->chinese+p1->math+p1->english;

p1->average=p1->sum/3;

printf("修改成功!\n");

break;

case 6:printf("阅读次数:");

scanf("%f",&p1->english);

while(p1->english<0||p1->english>100){

printf("年输入的阅读次数不符合实际情况,请重新输入!\n");

printf("阅读次数:");

scanf("%f",&p1->english);}

p1->sum=p1->chinese+p1->math+p1->english;

p1->average=p1->sum/3;

printf("修改成功!\n");break;

case 0:break;

default:printf("输入错误,请重新选择!\n");

}

}while(k!=0);

}

else

printf("没有找到你要修改的图书的信息!\n");

return(head);

}

book *del(book *head,long num)

{

book *p1,*p2;

if(head==NULL){printf("数据库为空,没有图书记录! \n");goto end;}

p1=head;

while(num!=p1->number&&p1->next!=NULL)

{

p2=p1;p1=p1->next;

}

if(num==p1->number)

{

if(p1==head){head=p1->next;printf("删除成功!\n");}

else {p2->next=p1->next;printf("删除成功!\n");}

n=n-1;

}

else printf("没有找到你要删除的图书信息!\n",num);

end:;

return(head);

}

book *insert(book *head,book *stud)

{

book *p0,*p1,*p2;

p1=head;

p0=stud;

if(head==NULL)

{head=p0;p0->next=NULL;}

else

{while((p0->number>p1->number)&&(p1->next!=NULL))

{

p2=p1;

p1=p1->next;

}

if(p0->number<=p1->number)

{

if(head==p1)head=p0;

else p2->next=p0;

p0->next=p1;

}

else

{

p1->next=p0;p0->next=NULL;

}

}

相关主题