图书管理系统(含源代码)c语言_数据结构课程设计报告

时间:2019-05-12 12:33:43下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《图书管理系统(含源代码)c语言_数据结构课程设计报告》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《图书管理系统(含源代码)c语言_数据结构课程设计报告》。

第一篇:图书管理系统(含源代码)c语言_数据结构课程设计报告

数据结构大作业 121279044 伍杨

数据结构大作业 图书管理系统

工程管理 121279044 伍杨

目录一、二、三、题目要求...................................................................2 总体设计...................................................................2 编码实现...................................................................3 1)定义图书结构体.......................................................3 2)登记操作...............................................................4 3)查看操作...............................................................8 4)删除操作.............................................................11 5)Main函数...........................................................20四、五、六、调试与测试..............................................................26 五心得体会..............................................................28 用户手册.................................................................28

数据结构大作业 121279044 伍杨

一、题目要求

1)目的要求

本课程设计任务的目的是要求学生按照分析、设计、编码、调试和测试的软件开发过程独立完成管理系统设计,以及C语言算法的掌握,并能最终实现本系统的功能要求,通过这个程序可以学习到以前调试短程序没有的的经验。2)题目要求

实现图书管理信息系统的设计。要求实现图书添加、显示全部图书、查询、借阅和归还。主要考查利用文件的操作!

二、总体设计

数据结构大作业 121279044 伍杨

三、编码实现

1)定义图书结构体

struct book{

char bookname[20];

//书名

int NO;

//书编号

char type[20];

//类型

int date;

//到书日期 };struct person{

char name[10];

//姓名

char classes[20];

//班级

int number;

//学号

char telephone[12];

//联系电话

int NO;

//书编号

char bookname[20];

//书名

int borrowdate;

//借书日期

int returndate;

//还书日期

数据结构大作业 121279044 伍杨

2)登记操作

void new_book(){ FILE *fp;struct book b;//登记新书

int i,j;

printf(“请朱老师输入此次收到的书本总数:”);if((fp=fopen(“shuku.txt”,“a”))==NULL){ printf(“File open error!n”);exit(0);}

scanf(“%d”,&i);

for(j=0;j

printf(“请朱老师输入书名:”);scanf(“%s”,b.bookname);fprintf(fp,“%s”,b.bookname);printf(“请朱老师输入书编号:”);scanf(“%d”,&b.NO);fprintf(fp,“

%d”,b.NO);printf(“请朱老师输入类型:”);scanf(“%s”,b.type);

数据结构大作业 121279044 伍杨

}

} fprintf(fp,“

%s”,b.type);printf(“请朱老师输入到书日期:”);scanf(“%d”,&b.date);fprintf(fp,“

%d”,b.date);if(fclose(fp)){

} printf(“Can not close the file!n”);exit(0);void new_person()

{

FILE *fp;struct person p;char choice;

//登记借书

if((fp=fopen(“jieshujilu.txt”,“a”))==NULL){ printf(“File open error!n”);exit(0);}

数据结构大作业 121279044 伍杨

printf(“请朱老师输入借书人姓名:”);scanf(“%s”,p.name);fprintf(fp,“%s”,p.name);printf(“请朱老师输入借书人班级:”);scanf(“%s”,p.classes);fprintf(fp,“

%s”,p.classes);printf(“请朱老师输入借书人学号:”);scanf(“%d”,&p.number);fprintf(fp,“

%d”,p.number);printf(“请朱老师输入借书人联系电话:”);scanf(“%s”,p.telephone);fprintf(fp,“

%s”,p.telephone);printf(“请朱老师输入书编号:”);scanf(“%d”,&p.NO);fprintf(fp,“

%d”,p.NO);printf(“请朱老师输入书名:”);scanf(“%s”,p.bookname);fprintf(fp,“

%s”,p.bookname);printf(“请朱老师输入借书日期:”);scanf(“%d”,&p.borrowdate);fprintf(fp,“

%d”,p.borrowdate);

数据结构大作业 121279044 伍杨

printf(“请朱老师输入还书日期:”);scanf(“%d”,&p.returndate);fprintf(fp,“

%d”,p.returndate);printf(“nt您想继续吗?(y/n)”);scanf(“ %c”,&choice);if(choice=='Y'||choice=='y'){

} system(“cls”);new_person();if(fclose(fp)){

} printf(“Can not close the file!n”);exit(0);}实现程序对文件的读取 void Read(){

int i=0;int j=0;ifstream in(“Libra.txt”,ios::out);in>>i;

数据结构大作业 121279044 伍杨

nt;

} all=i;if(i>0&&i<=Max){

in>>data[j].id>>data[j].name>>data[j].type>>data[j].status>>data[j].coufor(j=1;j<=i;j++){ } } in.close();

3)查看操作

v void see_book(){

FILE *fp;long NO;char bookname[20];char type[20];long date;//查看书库记录

数据结构大作业 121279044 伍杨

} if((fp=fopen(“shuku.txt”,“r”))==NULL){

} printf(“File open error!n”);exit(0);while(!feof(fp)){ fscanf(fp,“%s%ld%s%ld”,bookname,&NO,type,&date);printf(“%-10s %-10ld %-10s %ldn”,bookname,NO,type,date);};if(fclose(fp)){

} printf(“Can not close the file!n”);exit(0);void see_person(){ //查看所有借书记录

数据结构大作业 121279044 伍杨

FILE *fp;char name[10];

char classes[20];

int number;char telephone[20];

int NO;

char bookname[20];

int borrowdate;

int returndate;

fscanf(fp,“%s %s %ld %s %ld %s %ld %ld”,name,classes,&number,telephonwhile(!feof(fp)){ if((fp=fopen(“jieshujilu.txt”,“r”))==NULL){

} printf(“File open error!n”);exit(0);e,&NO,bookname,&borrowdate,&returndate);printf(“%-5s %-5s %ld %-5s %ld %-5s %ld %ldn”,name,classes,number,telephone,NO,bookname,borrowdate,returndate);

数据结构大作业 121279044 伍杨

} };if(fclose(fp)){

} printf(“Can not close the file!n”);exit(0);

4)删除操作

void delete_books()

{

int number;void deletebooks();

printf(“请输入您要删除的书编号:”);scanf(“%d”,&number);FILE *fp;struct book b;

//删除旧书

数据结构大作业 121279044 伍杨

if((fp=fopen(“shuku.txt”,“r”))==NULL){

} printf(“不能打开此文件!n”);exit(0);while(!feof(fp)){ fscanf(fp,“%s %d %s %d”,b.bookname,&b.NO,b.type,&b.date);

} if(b.NO==number){

} printf(“nnt***************图书信息*******************n”);printf(“nt图书书名:%25s”,b.bookname);printf(“nt----------”);printf(“nt图书编号:%25d”,b.NO);printf(“nt----------”);printf(“nt图书类型:%23s”,b.type);printf(“nt----------”);printf(“nt到书日期:%25d”,b.date);printf(“nt----------”);

deletebooks();

数据结构大作业 121279044 伍杨

}

void deletebooks(){

while(!feof(fp)){ fscanf(fp,“%s %d %s %d”,b.bookname,&b.NO,b.type,&b.date);if((fp=fopen(“shuku.txt”,“r”))==NULL){

} if((fp1=fopen(“tempshuku.txt”,“w”))==NULL){

//建立一个临时文件

} printf(“不能打开此文件!n”);exit(0);printf(“不能打开此文件!n”);exit(0);printf(“nn确认删除?请再次输入书编号:”);scanf(“%d”,&number);FILE *fp,*fp1,*fp2,*fp3;int number;struct book b;

数据结构大作业 121279044 伍杨

} if(b.NO==number)continue;else

fprintf(fp1,“%s %d %s %d”,b.bookname,b.NO,b.type,b.date);fclose(fp);fclose(fp1);if((fp2=fopen(“tempshuku.txt”,“r”))==NULL){

} if((fp3=fopen(“shuku.txt”,“w”))==NULL){

//清空书库

} while(!feof(fp2)){

//将临时文件的内容写人源文件

} fscanf(fp2,“%s %d %s %d”,b.bookname,&b.NO,b.type,&b.date);fprintf(fp3,“%s %d %s %d”,b.bookname,b.NO,b.type,b.date);printf(“不能打开此文件!n”);exit(0);printf(“不能打开此文件!n”);exit(0);

数据结构大作业 121279044 伍杨

}

void delete_returnbook(){

if((fp=fopen(“jieshujilu.txt”,“r”))==NULL){

} printf(“不能打开此文件!n”);exit(0);printf(“n请输入所还书本的书编号:”);scanf(“%d”,&numbers);FILE *fp;int numbers;struct person p;void deletereturnbook();char choice;printf(“n

删除成功!n”);fclose(fp2);fclose(fp3);

//删除借书记录

数据结构大作业 121279044 伍杨

while(!feof(fp)){

fscanf(fp,“%s %s %ld %s %ld %s %ld %ld”,p.name,p.classes,&p.number,p.telephone,&p.NO,p.bookname,&p.borrowdate,&p.returndate);

if(p.NO==numbers){

printf(“nt***************图书信息*******************n”);printf(“nt借书人姓名:%20s”,p.name);printf(“nt----------”);printf(“nt借书人班级:%20s”,p.classes);printf(“nt----------”);printf(“nt借书人学号:%20d”,p.number);printf(“nt----------”);printf(“nt借书人联系电话:%20s”,p.telephone);printf(“nt----------”);printf(“nt图书编号:%24d”,p.NO);printf(“nt----------”);printf(“nt图书名称:%23s”,p.bookname);printf(“nt----------”);printf(“nt借书日期:%25d”,p.borrowdate);printf(“nt----------”);printf(“nt还书日期:%25d”,p.returndate);

数据结构大作业 121279044 伍杨

}

}

} printf(“nt----------”);

deletereturnbook();

printf(“nt您想继续吗?(y/n)”);scanf(“ %c”,&choice);if(choice=='Y'||choice=='y'){

} system(“cls”);delete_returnbook();fclose(fp);void deletereturnbook(){ FILE *fp,*fp1,*fp2,*fp3;struct person p;

int numbers;printf(“nn确认删除?请再次输入书编号:”);

数据结构大作业 121279044 伍杨

scanf(“%d”,&numbers);if((fp=fopen(“jieshujilu.txt”,“r”))==NULL){

} if((fp1=fopen(“tempbook.txt”,“w”))==NULL){

} printf(“不能打开此文件!n”);exit(0);printf(“不能打开此文件!n”);exit(0);while(!feof(fp)){ fscanf(fp,“%s %s %d %s %d %s %d %d”,p.name,p.classes,&p.number,p.telephone,&p.NO,p.bookname,&p.borrowdate,&p.returndate);

if(p.NO==numbers)continue;else

fprintf(fp1,“%s %s %d %s %d %s %d %d”,p.name,p.classes,p.number,p.telephone,p.NO,p.bookname,p.borrowdat

数据结构大作业 121279044 伍杨

e,p.returndate);

fscanf(fp2,“%s %s %d %s %d %s %d %d”,p.name,p.classes,while(!feof(fp2)){

//将临时文件写人源文件 if((fp2=fopen(“tempbook.txt”,“r”))==NULL){

} if((fp3=fopen(“jieshujilu.txt”,“w”))==NULL){

} printf(“不能打开此文件!n”);exit(0);printf(“不能打开此文件!n”);exit(0);fclose(fp);fclose(fp1);} &p.number,p.telephone,&p.NO,p.bookname,&p.borrowdate,&p.returndate);

fprintf(fp3,“%s %s %d %s %d %s %d %d”,p.name,p.数据结构大作业 121279044 伍杨

classes,p.number,p.telephone,p.NO,p.bookname,p.borrowdate,p.returndate);

} printf(“n

删除成功!n”);fclose(fp2);fclose(fp3);} 5)Main函数

int main(void){

do{ printf(“nnn

图书馆管理系统na”);printf(“ *******************************************************n”);int choice;char choice2;struct book;struct person;

数据结构大作业 121279044 伍杨

printf(“ ***朱老师您好吖********功能选项: 登记******请按1,******n”);printf(“ ******************************* 查看/查询*请按2 ******n”);printf(“ ******************************* 删除***** 请按3 ******n”);printf(“ ******************************* 退出***** 请按0 ******n”);printf(“ *******************************************************nnn”);printf(“

请选择功能:”);scanf(“%d”,&choice);switch(choice){ case 1:

printf(“

登记选项:新书登记请按1,借书登记请按2,返回请按3n”);printf(“请选择:”);scanf(“%d”,&choice);switch(choice){ case 1:

system(“cls”);

//清屏 printf(“新书资料登记:nn”);new_book();

//新书登记 printf(“登记完毕!n”);printf(“n”);scanf(“ %c”,&choice2);system(“cls”);break;

数据结构大作业 121279044 伍杨

case 2:

system(“cls”);printf(“借书资料登记:nn”);new_person();

//借书登记 printf(“n press anykey ”);scanf(“ %c”,&choice2);system(“cls”);break;case 3:

} break;system(“cls”);break;

case 2: printf(“

查看/查询选项:书库查看请按1,总借书记录查看请按2,到期记录查询请按3,返回请按4n”);

printf(“请选择:”);scanf(“%d”,&choice);switch(choice){ case 1:

system(“cls”);printf(“欢迎朱老师进入书库!nn”);

数据结构大作业 121279044 伍杨

printf(“书名

书编号

类型

到书日期n”);printf(“-----------n”);see_book();

//书库显示 printf(“n press anykey ”);scanf(“ %c”,&choice2);system(“cls”);break;case 2:

system(“cls”);printf(“欢迎朱老师进入借书记录!nn”);printf(“姓名

班级 学号 联系电话 书编号 书名

借书日期 到书日期n”);

printf(“-------------------------n”);see_person();

//借书记录显示

printf(“n press anykey ”);scanf(“ %c”,&choice2);system(“cls”);break;case 3:

system(“cls”);search_person();

//显示符合记录 printf(“n press anykey ”);

数据结构大作业 121279044 伍杨

scanf(“ %c”,&choice2);system(“cls”);break;case 4:

} break;system(“cls”);break;case 3: printf(“

删除选项:旧书删除请按1,借书记录删除请按2,返回请按3n”);

printf(“请选择:”);scanf(“%d”,&choice);switch(choice){ case 1:

system(“cls”);delete_books();

//删除ing printf(“n press anykey ”);scanf(“ %c”,&choice2);system(“cls”);break;case 2:

数据结构大作业 121279044 伍杨

}

system(“cls”);delete_returnbook();

//删除ing printf(“n press anykey ”);scanf(“ %c”,&choice2);system(“cls”);break;case 3:

} break;system(“cls”);break;case 0:

} system(“cls”);}while(choice!= 0);return 0;

数据结构大作业 121279044 伍杨

四、调试与测试

主菜单

登记

数据结构大作业 121279044 伍杨

查看

删除

生成的文件内信息

数据结构大作业 121279044 伍杨五、五心得体会

经过这次大作业,我觉得代码的编写,最主要的的是编程思想,语言其实不是太重要,思路最重要!

六、用户手册

程序执行文件为 lib sys.exe,打开执行文件后按提示操作即可

第二篇:c语言课程设计-学籍管理系统(含源代码)

课 程 设 计 课程设计名称: C语言程序设计 题 目:学籍管理系统 学 生 姓 名: 学生学号 : 学 院(系): 软件学院 专 业 班 级: 112021 指 导 教 师:

设计时间: 2012 年 9 月 日  2012 年 9月_ 14 日

实验题目:学籍管理系统一、实验目的

综合应用所学的C语言程序设计知识,自行设计并实现一个较为完整的小型管理信息系统。通过系统分析、系统设计、编程实现,写实验报告等环节,初步掌握软件系统的设计方法和步骤,提高灵活运用程序语言进行软件开发的技能,提高程序设计水平和分析问题、解决问题的能力。

二、实验内容

1):熟悉C语言的开发环境,按照给定的上机步骤练习完成;

2):熟悉C程序的编辑,编译,链接和运行的过程。3):编译一个应用系统程序,形成一个软件系统。

三.实验要求

1.1、分析系统功能

(1)用户进入主菜单后,就会在看到,菜单选项中添加有系统的各项功能,进入的

应的选项就可进行相应的操作.其主要功能有:

1、录入学生信息

2、删除学生信息

3、查询学生信息

4、学生信息排序

5、改学生信息

6、保存退出系统

(2)用户选择所需操作的选项,进入相应的操作界面,在这里用户就可开始进行操作。

四、使用说明

学生学籍管理系统是针对学生信息的管理,主要功能是添加学生信息、删除学生信息、查询学生信息、学生信息排序、修改学生信息、保存信息。

1,用户打开程序,进入主界面,输入学生信息如图

2,按回车进入主菜单,列出各项功能如图

输入1,是查询整个班级的学生的信息,如图

输入2,是查询个别学生的信息,如查询第一学生的信息,如图

输入3,是删除个别学生的信息,如删除第一个学生,如图

输入4,是插入某些学生的信息,如插入第三个,如图

输入5,是修改某个同学的信息,如删除第一个,如图

三、心得体会

两周的课程过起来其实也是很快的。这是我第一次做课程设计,起初还没做的时候觉得很快自己就将得编一个较大的程序,将会很有意思。带着最初的好奇心,新鲜感就这样开始了第一天的编程,结果是大失所望。做课程设计并不是自己想象中的那样有意思,而是很枯燥,很乏味的。也没想象中的那样简单,并不是像我们平时上C语言课时,每次编的那些小程序,没那么简单。我们现在要做的就是将我们平时学的,做的那些小程序都合理的凑到一块儿来。而把这些小程序都加到一块儿来,并不是随意的将它们放到一个程序中就完事的,而是必须得合理,且得顾及到各个方面。

正是由于编程的纷繁复杂,且结构的严谨,因此编程的过程中到处是困难和问题。它考验的不仅是我们的平时用功程度,以及我们对所学知识的熟练掌握程度、应用的灵活程度,它还考验我们的毅力。在刚开始的几天时,由于前一阵忙于各科的考试,C语言已经好久没碰了,所学的知识都有点遗忘了,在编写时处处碰壁,一直会停顿翻书,编得自己都开始心烦意乱了,实在是编不下去了,于是索性就停了三天去看书,先把书给吃透。并在后期的程序调试中也碰到不少的问题,好多问题自己反复检查了几遍都没查出,但在老师的帮助下还是一下就查出了。并不是这些问题多难,而是不够心细。因此做课程设计、编程时,它还考验并锻炼我们的心细程度。

经过这次的课程设计的实践,我受益颇多,不仅是对我掌握知识、灵活运用知识的一次考验和锻炼,也是对我生活态度的一次锻炼,让我学会心细和拥有毅力,更具信心和恒心,碰到困难不再退缩,而是坚强面对。

四,程序编码

/*做一个学生的学籍管理系统,有输入,查询,删除,增加,修改等功能*/ #include /*程序需要的头文件*/ #include

#include #include #include #define SIZE 4

/*声明数组的大小,可以任意改动*/ int board[50][50];/*声明一个表格的数组*/ int cur_x, cur_y;/*定义坐标*/

void init();/*声明一个初始化界面的函数*/ void clear();/*清除界面的函数*/

void draw_board();/*声明一个函数画表格*/ struct student{/*创建一个学生的结构体*/

char stuNo[8];

/*学生的学号*/

char name[10];/*学生的姓名*/

char sex[2];/*学生的性别*/

char score[4];

/*学生的分数*/

char address[10];/*学生的地址*/ };void init()/*初始化函数*/ {

int gdriver, gmode, i, j;

gdriver = DETECT;/*图形界面的驱动声明*/

registerbgidriver(EGAVGA_driver);

initgraph(&gdriver, &gmode, “");

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

for(j = 0;j < 10;j++)/*声明坐标的间距*/

board[i][j] = 0;

cur_x = 1;

cur_y = 1;}

void destroy()/*关闭图形驱动器*/ {

closegraph();}

void draw_board(int n)/*画表格的函数*/ {

int i, j;

for(i = 20;i <=5*160+80;i += 90)/*划横线的循环*/

{

line(i, 20, i,(n+1)*60+20);

}

for(i = 20;i <=(n+1)*60+30;i += 60)/*划纵线的循环*/

{

line(20, i, 5*110+10, i);

} }

void main(){

struct student stu[SIZE],stu_temp;/*声明结构体变量*/

FILE *fp;

/*声明文件型的指针*/

int i,j,n,m,h;

int c=1;/*c为循环次数*/

h=0;

fp=fopen(”c:list.txt“,”wb+“);/*打开写入文件*/

init();/*调用函数*/

draw_board(SIZE);

if(fp==NULL)/*验证文件是否为空*/

{

printf(”cannot open this filen“);

exit(0);

}

printf(”input all %d students's data.n“,SIZE);/*画输入学生信息的表*/

gotoxy(17,4);

printf(”stuNo“);

gotoxy(29,4);

printf(”name“);

gotoxy(41,4);

printf(”sex“);

gotoxy(52,4);

printf(”score“);

gotoxy(63,4);

printf(”address“);

for(i=0;i

{

gotoxy(7,4*(i+2));

printf(”%d“,i);

gotoxy(17,4*(i+2));

scanf(”%s“,&stu[i].stuNo);

gotoxy(29,4*(i+2));

scanf(”%s“,&stu[i].name);

gotoxy(41,4*(i+2));

scanf(”%s“,&stu[i].sex);

gotoxy(52,4*(i+2));

scanf(”%s“,&stu[i].score);

gotoxy(63,4*(i+2));

scanf(”%s“,&stu[i].address);

}

for(i=0;i

if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)

{

printf(”file write error!“);

exit(0);

}

rewind(fp);

clrscr();

for(c=1;c<100;c++)/*创建一个图形界面*/

{

textbackground(0);

textcolor(1);

gotoxy(29,7);

printf(”read->1“);

gotoxy(29,9);

printf(”find->2“);

gotoxy(29,11);

printf(”delete->3“);

gotoxy(29,13);

printf(”insert->4“);

gotoxy(29,15);

printf(”modify->5“);

gotoxy(29,17);

printf(”plese enter j= “);

scanf(”%d“,&j);

clrscr();

if(j==1)/*当输入为1时,显示整个班级

{的学生信息*/

draw_board(SIZE);

gotoxy(17,4);

printf(”stuNo“);

gotoxy(29,4);

printf(”name“);

gotoxy(41,4);

printf(”sex“);

gotoxy(52,4);

printf(”score“);

gotoxy(63,4);

printf(”address“);

for(i=0;i

{

fread(&stu_temp,sizeof(struct student),1,fp);出每个学生的信息*/

gotoxy(7,4*(i+2));

printf(”%d“,i);

gotoxy(17,4*(i+2));

printf(”%s“,stu[i].stuNo);

gotoxy(29,4*(i+2));

printf(”%s“,stu[i].name);

gotoxy(41,4*(i+2));

printf(”%s“,stu[i].sex);

gotoxy(52,4*(i+2));

printf(”%s“,stu[i].score);

gotoxy(63,4*(i+2));

printf(”%s“,stu[i].address);

}

fclose(fp);

/*关闭文件*/

getch();/*留在当前界面*/

clrscr();/*清屏*/

}

if(j==2)/*当输入为2时,查找某个学生的 {信息*/

rewind(fp);/*移动指针到最前*/

printf(”look up the nth(n<4)student,plese enter n= :n“);/*输入要查找的学生

scanf(”%d“,&i);位置*/

clrscr();

draw_board(1);/*画表格*/

gotoxy(17,4);

printf(”stuNo“);

gotoxy(29,4);

printf(”name“);

gotoxy(41,4);

printf(”sex“);

gotoxy(52,4);

printf(”score“);

gotoxy(63,4);

printf(”address“);

fseek(fp,(i-1)*sizeof(struct student),0);/*打开文件查找,读出信

fread(&stu_temp,sizeof(struct student),1,fp);息*/

gotoxy(7,8);

printf(”%d“,i);

gotoxy(17,8);

printf(”%s“,stu[i].stuNo);

gotoxy(29,8);

printf(”%s“,stu[i].name);

gotoxy(41,8);

printf(”%s“,stu[i].sex);

gotoxy(52,8);

printf(”%s“,stu[i].score);

gotoxy(63,8);

printf(”%s“,stu[i].address);

}

fclose(fp);

getch();

clrscr();

if(j==3)/*当输入为3,删除某个学生的信息*/

{

h=h-1;/*表格少画一格*/

printf(”you want delete nth student,plese enter n= “);

scanf(”%d“,&n);

draw_board(SIZE+h);/*调用函数画表格*/

gotoxy(17,4);

printf(”stuNo“);

gotoxy(29,4);

printf(”name“);

gotoxy(41,4);

printf(”sex“);

gotoxy(52,4);

printf(”score“);

gotoxy(63,4);

printf(”address“);

for(m=n;m

{

strcpy(stu[m].stuNo,stu[m+1].stuNo);

strcpy(stu[m].name,stu[m+1].name);

strcpy(stu[m].sex,stu[m+1].sex);

strcpy(stu[m].score,stu[m+1].score);

strcpy(stu[m].address,stu[m+1].address);

}

for(i=0;i

{

fread(&stu_temp,sizeof(struct student),1,fp);个表格*/

gotoxy(7,4*(i+2));

printf(”%d“,i);

gotoxy(17,4*(i+2));

printf(”%s“,stu[i].stuNo);

gotoxy(29,4*(i+2));

printf(”%s“,stu[i].name);

gotoxy(41,4*(i+2));

printf(”%s“,stu[i].sex);

gotoxy(52,4*(i+2));

printf(”%s“,stu[i].score);

gotoxy(63,4*(i+2));

printf(”%s“,stu[i].address);

}

fclose(fp);

getch();

clrscr();

} if(j==4)/*当输入为4时,增加一个学生

{信息*/

h=h+1;

printf(”you want insert nth student,plese enter n= “);

scanf(”%d“,&n);

for(m=n;m

{息*/

strcpy(stu[m+1].stuNo,stu[m].stuNo);

strcpy(stu[m+1].name,stu[m].name);

strcpy(stu[m+1].sex,stu[m].sex);

strcpy(stu[m+1].score,stu[m].score);

strcpy(stu[m+1].address,stu[m].address);

}

draw_board(1);/*调用函数画表格*/

gotoxy(7,4*2);

printf(”%d“,n);

gotoxy(17,4);

printf(”stuNo“);

gotoxy(29,4);

printf(”name“);

gotoxy(41,4);

printf(”sex“);

gotoxy(52,4);

printf(”score“);

gotoxy(63,4);

printf(”address“);

gotoxy(17,8);/*输入一个新学生的 scanf(”%s“,&stu[n].stuNo);信息*/

gotoxy(29,8);

scanf(”%s“,&stu[n].name);

gotoxy(41,8);

scanf(”%s“,&stu[n].sex);

gotoxy(52,8);

scanf(”%s“,&stu[n].score);

gotoxy(63,8);

scanf(”%s“,&stu[n].address);

gotoxy(7,8);

printf(”%d“,i);

gotoxy(17,8);

printf(”%s“,stu[n].stuNo);

gotoxy(29,8);

printf(”%s“,stu[n].name);

gotoxy(41,8);

printf(”%s“,stu[n].sex);

gotoxy(52,8);

printf(”%s“,stu[n].score);

gotoxy(63,8);

printf(”%s“,stu[n].address);

clrscr();

draw_board(SIZE+h);

gotoxy(17,4);

printf(”stuNo“);

gotoxy(29,4);

printf(”name“);

gotoxy(41,4);

printf(”sex“);

gotoxy(52,4);

printf(”score“);

gotoxy(63,4);

printf(”address“);

for(i=0;i

{

fread(&stu_temp,sizeof(struct student),1,fp);表格*/

gotoxy(7,4*(i+2));

printf(”%d“,i);

gotoxy(17,4*(i+2));

printf(”%s“,stu[i].stuNo);

gotoxy(29,4*(i+2));

printf(”%s“,stu[i].name);

gotoxy(41,4*(i+2));

printf(”%s“,stu[i].sex);

gotoxy(52,4*(i+2));

printf(”%s“,stu[i].score);

gotoxy(63,4*(i+2));

printf(”%s“,stu[i].address);

}

fclose(fp);

getch();

clrscr();

}

if(j==5)/*当输入为5,修改某个学生

{信息*/

printf(”you want to modify nth student information,plese enter n= “);

scanf(”%d“,&n);

/*输入修改的学生的位置*/

draw_board(1);

draw_board(1);

gotoxy(7,4*2);

printf(”%d“,n);

gotoxy(17,4);

printf(”stuNo“);

gotoxy(29,4);

printf(”name“);

gotoxy(41,4);

printf(”sex“);

gotoxy(52,4);

printf(”score“);

gotoxy(63,4);

printf(”address“);

gotoxy(17,8);

/*输入新的学生信息*/

scanf(”%s“,&stu[n].stuNo);

gotoxy(29,8);

scanf(”%s“,&stu[n].name);

gotoxy(41,8);

scanf(”%s“,&stu[n].sex);

gotoxy(52,8);

scanf(”%s“,&stu[n].score);

gotoxy(63,8);

scanf(”%s“,&stu[n].address);

gotoxy(7,8);

clrscr();

draw_board(SIZE);

gotoxy(17,4);

printf(”stuNo“);

gotoxy(29,4);

printf(”name“);

gotoxy(41,4);

printf(”sex“);

gotoxy(52,4);

printf(”score“);

gotoxy(63,4);

printf(”address“);

for(i=0;i

{

fread(&stu_temp,sizeof(struct student),1,fp);

gotoxy(7,4*(i+2));

printf(”%d“,i);

gotoxy(17,4*(i+2));

printf(”%s“,stu[i].stuNo);

gotoxy(29,4*(i+2));

printf(”%s“,stu[i].name);

gotoxy(41,4*(i+2));

printf(”%s“,stu[i].sex);

gotoxy(52,4*(i+2));

printf(”%s“,stu[i].score);

gotoxy(63,4*(i+2));

printf(”%s",stu[i].address);

}

fclose(fp);/*关闭文件*/

getch();/*保留在这个界面上*/

clrscr();/*清屏*/

}

}

}

第三篇:C语言课程设计火车票系统源代码

#include #include #include //火车票结构体类型// typedef struct Node {int num;

//编号// char name[20];

//起点和终点// char time[5];

//出发时间// int price;

//车票价格// int amount;

//剩余数量// struct Node *next;}Node;//创建链表并输入数据// struct Node *creat(){ struct Node *head,*r,*s;

int i=0;

char choice;

head=(struct Node *)malloc(sizeof(struct Node));head->next=NULL;r=head;do {

s=(struct Node *)malloc(sizeof(struct Node));s->next=NULL;printf(“请输入第%d种火车票的信息:n”,++i);printf(“请输入火车的编号:”);

scanf(“%d”,&s->num);

printf(“起点和终点:”);scanf(“%s”,s->name);printf(“出发时间:”);scanf(“%s”,s->time);printf(“车票价格:”);scanf(“%d”,&s->price);printf(“剩余数量:”);scanf(“%d”,&s->amount);

r->next=s;

r=s;

printf(“Continue?(Y/N)”);scanf(“%s”,&choice);}while(choice=='Y'||choice=='y');

r->next=NULL;return(head);} //将单链表中的信息保存到文件1.txt中// void save(struct Node *h){

struct Node *s;FILE *fp;

char filename[10]=“1.txt”;

fp=fopen(“1.txt”,“wt”);if(fp==NULL){

printf(“n写文件出错,按任意键退出!”);getchar();exit(1);}

for(s=h->next;s!=NULL;s=s->next)

fprintf(fp,“%d %s %s %d %d n”,s->num,s->name,s->time,s->price,s->amount);

getchar();fclose(fp);} // 从文件1.txt中读取信息并存入单链表中// struct Node *read(){ struct Node *head,*r,*s;FILE *fp;char filename[10]=“zl.txt”;fp=fopen(“1.txt”,“rt”);if(fp==NULL){

printf(“读文件错误,按任意键退出!”);getchar();exit(1);} head=(struct Node *)malloc(sizeof(struct Node));head->next=NULL;r=head;while(!feof(fp)){

s=(struct Node *)malloc(sizeof(struct Node));fscanf(fp,“%d %s %s %d %d”,&s->num,s->name,s->time,&s->price,&s->amount);

r->next=s;r=s;

} r->next=NULL;fclose(fp);

return head;} //将链表中的数据输出// void print(struct Node *h){

struct Node *s;

printf(“n火车票信息如下:n”);

printf(“~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n”);printf(“编号

起点和终点

出发时间

车票价格

剩余票数:n”);

for(s=h->next;s->next!=NULL;s=s->next){ printf(“ %d

%10s

%5s %10d %6dn”,s->num,s->name,s->time,s->price,s->amount);} } //链表查询// struct Node * find(struct Node *h){ int i,j;char s[20];printf(“tt

查询方法有以下几种:n”);printf(“tt

1.火车票编号n”);printf(“tt

2.起点和终点n”);printf(“tt

3.出发时间n”);printf(“tt

4.车票价格n”);printf(“tt

5.剩余票数n”);printf(“请输入您要查询的方法的序号:”);scanf(“%d”,&i);switch(i){ case 1:printf(“请输入你要查询火车票的编号:”);scanf(“%d”,&j);

while(h->next!=NULL)

{

h=h->next;

if(h->num==j)return h;

}

return NULL;break;case 2:printf(“请输入您要查询火车票的起点和终点:”);scanf(“%s”,s);while(h->next!=NULL){

h=h->next;if(strcmp(h->name,s)==0)

return h;

} return NULL;break;case 3:printf(“请输入您要查询火车票的时间:”);

scanf(“%s”,s);

while(h->next!=NULL)

{

h=h->next;

if(strcmp(h->time,s)==0)

return h;

}

return NULL;

break;case 4:printf(“请输入你要查询火车票的价格 :”);scanf(“%d”,&j);

while(h->next!=NULL)

{

h=h->next;

if(h->price==j)

return h;

}

return NULL;

break;case 5:printf(“请输入你要查询火车票的剩余票数:”);scanf(“%d”,&j);

while(h->next!=NULL)

{

h=h->next;

if(h->amount==j)

return h;

} return NULL;

break;} } //修改信息// change(struct Node *h,int k){ int j;struct Node *p;p=find(h);printf(“------------n”);printf(“t

您要修改哪一项?n”);printf(“t

1.火车编号n”);printf(“t

2.起点和终点n”);printf(“t

3.出发时间n”);printf(“t

4.车票价格n”);

printf(“t

5.剩余票数n”);printf(“t

0.退出系统n”);

printf(“------------n”);printf(“请输入您要修改项的编号:”);scanf(“%d”,&j);switch(j)

{ case 1:

printf(“修改后的火车编号:”);

scanf(“%d”,&p->num);

break;

case 2:

printf(“修改后的起点和终点:”);

scanf(“%s”,p->name);

break;

case 3:

printf(“修改后的出发时间:”);

scanf(“%s”,p->time);

break;

case 4:

printf(“修改后的车票价格:”);

scanf(“%d”,&p->price);

break;

case 5:

printf(“修改后的剩余票数:”);

scanf(“%d”,&p->amount);

break;

case 0:break;} } //删除信息// delete(struct Node *h){ struct Node *p;

int j;

printf(“请输入您要删除的火车票的编号:”);scanf(“%d”,&j);p=h->next;

if(p==NULL)

return 0;while(p!=NULL){ if(p->num==j){

h->next=p->next;

free(p);

return 1;} h=p;p=p->next;

} return 0;} //添加信息// void append(){

struct Node *p;

FILE *fp;

fp=fopen(“1.txt”,“at+”);

if(fp==NULL)

{

printf(“写文件出错,按任意键返回.n”);getchar();exit(1);

}

printf(“请输入要添加的火车票的信息:火车编号,起点和终点,出发时间,车票价格,剩余票数:n”);scanf(“%d%s%s%d%d”,&p->num,p->name,p->time,&p->price,&p->amount);fprintf(fp,“%d %s %s %d %dn”,p->num,p->name,p->time,p->price,p->amount);getchar();fclose(fp);} //数据的统计// void count(struct Node *h){ struct Node *s;s=h;int i,j,k,n=0;printf(“*****************************************************************************n”);

printf(“tt

请选择您要统计项目的序号:n”);

printf(“tt

1.车票价格n”);

printf(“tt

2.剩余票数n”);printf(“tt

0.退出界面n”);

scanf(“%d”,&i);switch(i)

{

case 1:

printf(“请输入您要统计车票的价格的标准:”);

scanf(“%d”,&j);

printf(“tt

请选择低于或高于标准:n”);

printf(“tt

1.价格低于%d的个数n”,j);

printf(“tt

2.价格高于%d的个数n”,j);

scanf(“%d”,&k);

if(k==1)

{

for(s=h->next;s->next!=NULL;s=s->next)

if(s->price

n++;

printf(“车票价格低于%d的个数有%d个.n”,j,n);

}

else

{

for(s=h->next;s->next!=NULL;s=s->next)

if(s->price>j)

n++;

printf(“车票价格低于%d的个数有%d个.n”,j,n);

}

break;

case 2:

printf(“请输入您要统计剩余票数的数量:”);

scanf(“%d”,&j);

printf(“tt

请选择低于或高于所输票数:n”);

printf(“tt

1.票数低于%d的个数n”,j);

printf(“tt

2.票数高于%d的个数n”,j);

scanf(“%d”,&k);

if(k==1)

{

for(s=h->next;s->next!=NULL;s=s->next)

if(s->amount

n++;

printf(“剩余票数低于%d的个数有%d个.n”,j,n);

}

else

{

for(s=h->next;s->next!=NULL;s=s->next)

if(s->amount>j)

n++;

printf(“剩余票数高于%d的个数有%d个.n”,j,n);

}

break;

case 0:break;

} } //保存用户和密码到文件2.txt中// void save_user(){

char file[10]=“2.txt”;FILE *fp;char name[20];char pwd[10];fp=fopen(“2.txt”,“at+”);if(fp==NULL){ printf(“n写文件出错,按任意键退出.n”);

getchar();exit(1);} printf(“请输入用户名:”);

scanf(“%s”,name);printf(“请输入密码:”);

scanf(“%s”,pwd);

fprintf(fp,“%s %sn”,name,pwd);

getchar();

fclose(fp);

printf(“用户注册成功!n”);} //检验用户和密码是否匹配// int check(char *name,char *pwd){ char name1[20];char pwd1[10];FILE *fp;char file[10]=“2.txt”;if((fp=fopen(“2.txt”,“rt”))==NULL){

printf(“读文件出错,按任意键退出!n”);

getchar();

exit(1);}

while(!feof(fp)){

fscanf(fp,“%s %s”,name1,pwd1);

if(strcmp(name1,name)==0&&strcmp(pwd1,pwd)==0)

return 1;} return 0;} //数据排序// void sort(struct Node *h){ struct Node *s,*p,*m,*n;int t,t1,t2,t3;char s1[20];char s2[10];

printf(“车票价格由小到大排序如下:n”);for(s=h->next;s->next!=NULL;s=s->next)for(p=s->next;p->next!=NULL;p=p->next)

if(s->price>p->price)

{

t1=s->num;s->num=p->num;p->num=t1;

t2=s->price;s->price=p->price;p->price=t2;

t3=s->amount;s->amount=p->amount;p->amount=t3;

strcpy(s1,s->name);strcpy(s->name,p->name);strcpy(p->name,s1);

strcpy(s2,s->time);strcpy(s->time,p->time);strcpy(p->time,s2);

}

print(h);printf(“nn剩余车票数量由多到少排序如下:n”);for(s=h->next;s->next!=NULL;s=s->next)

for(p=s->next;p->next!=NULL;p=p->next)

if(s->amount

amount)

{

t1=s->num;s->num=p->num;p->num=t1;

t2=s->price;s->price=p->price;p->price=t2;

t3=s->amount;s->amount=p->amount;p->amount=t3;

strcpy(s1,s->name);strcpy(s->name,p->name);strcpy(p->name,s1);

strcpy(s2,s->time);strcpy(s->time,p->time);strcpy(p->time,s2);

} print(h);} void main(){ struct Node *head,*p;int i,j,k;head=(struct Node *)malloc(sizeof(struct Node));head->next=NULL;char name[20];char pwd[10];printf(“n***************欢迎进入火车票管理系统******************n”);printf(“tt 1.用户登录n”);printf(“tt 2.用户注册n”);printf(“tt 0.退出系统 n”);printf(“请输入所选序号:”);scanf(“%d”,&k);

switch(k){ case 1: printf(“请输入用户名:”);

scanf(“%s”,name);

printf(“请输入密码:”);

scanf(“%s”,pwd);

if(check(name,pwd))

{

printf(“密码正确.n”);

do

{

printf(“nntt*********************欢迎进入火车票管理系统***********************n”);

printf(“tt

1.录入火车票信息tt

2.添加火车票信息n”);

printf(“tt

3.修改火车票信息tt

4.删除火车票信息n”);

printf(“tt

5.打印火车票信息tt

6.查询火车票信息n”);

printf(“tt

7.统计火车票信息tt

8.火车票销售排行n”);

printf(“tt

0.退出系统n”);

printf(“请输入您要进入菜单的序号(0-8):”);

scanf(“%d”,&i);

switch(i)

{

case 1:

printf(“请录入火车票信息nn”);

head=creat();

save(head);

head=read();

break;

case 2:

append();

break;

case 3:

printf(“请输入您要修改的火车票的编号:”);

scanf(“%d”,&j);

change(head,j);

save(head);

break;

case 4:

head=read();

if(delete(head))

{

printf(“已正确删除!n”);

save(head);

}

else

printf(“要删除的结点不存在!n”);

break;

case 5:

head=read();

print(head);

break;

case 6:

printf(“请输入您要查询火车票的编号(以0结束):”);

scanf(“%d”,&j);

{

p=find(head);

printf(“编号

起点和终点

出发时间

车票价格

剩余票数:n”);

printf(“%d

%10s

%5s %10d %6dn”,p->num,p->name,p->time,p->price,p->amount);

printf(“请继续输入序号(以0结束):”);

scanf(“%d”,&j);

}

break;

case 7: head=read();count(head);break;

case 8: sort(head);break;

case 0: printf(“************************用!*****************************n”);break;

}

}while(i!=0);

}

else

printf(“密码错误或用户名不存在.n”);

break;case 2:save_user();break;case 0:break;}

使

第四篇:数据结构实验报告(报告+C语言源代码)

目录

前言..................................................................................................................2 概要设计..................................................................................................................3 1.1 数据结构设计...........................................................................................3 2.1 算法设计...................................................................................................3 2.1.1 建立链表的算法..............................................................................3 2.1.2 链表插入一个元素的算法..............................................................3 2.1.3 链表删除一个元素的算法..............................................................3 3.1 ADT描述..................................................................................................4

4.1

详细设计…………………………………………… ……………………………… 4

4.1.1

数据存储结构……………………………… ……………………………… 4.4.1.2

主要伪代码…… …………………… ……………………………………… 4 软件测试..................................................................................................................7 心得体会................................................................................................................11 源代码...................................................................................................................12 参考文献………………………………………………………………………...21

前言

数据结构是计算机程序设计的重要理论技术基础,它不仅是计算机学科的核心课程,而且已经成为其他理工专业的热门选修课。

随着计算机科学的技术和发展,计算机的功能和运算速度不断地提高,其应用于信息处理的范围日益扩大。与之相应的,计算机的加工处理对象也从简单的数据发展到一般的符号,进而发展到更复杂的数据结构。数据结构是计算机程序设计的重要理论技术基础,数据结构的表示和操作都涉及到算法,如何描述数据的结构和讨论有关的算法,又涉及到程序设计语言。因此,它不仅是计算机学科的核心课程,而且已经成为其他理工专业的热门选修课。我们通过对这门基础课程的学习,要学会分析研究计算机加工的数据结构的特性,以便为应用涉及的数据选择适合的逻辑结构,储存结构及其相应的算法,并初步掌握算法时间分析和空间分析的技术。通过实际操作去了解数据结构原理,练习编写代码的能力,以及抽象能力。

从课程性质上讲,“数据结构”是一门专业技术基础课。它的要求是学会分析研究计算机加工的数据结构的特性,以便为应用涉及的数据选择适当的逻辑结构,存储结构及相应的算法,并初步掌握算法的时间分析和空间分析的技术。另一方面,数据结构的学习过程也是复杂程序设计的训练过程,要求编写的程序结构清楚和正确易读,符合软件工程的规范。

概要设计

1.1 数据结构设计

采用链式储存结构。typedef struct LNode{ ElemType data;struct LNode *next;}LNode,*LinkList;2.1 算法设计

2.1.1 建立链表的算法

(1)算法思想分析

首先从表尾到表头逆向建立单链表,然后再建立的单链表基础上进行对链表上的元素进行查询,删除,插入的操作。(2)要点描述

首先建立一个带头结点的单链表,通过申请内存,先建立一个空链表。然后结点的插入,建立一个有多个结点的链表。在进行查询等操作。(3)时间和空间复杂度分析

程序的时间复杂度为O(n)。

2.1.2 链表插入一个元素的算法

(1)算法思想分析

要生成一个新数据域为X的结点,然后插入在单链表中。(2)要点描述

在链表中插入结点只需要修改指针。若要在第 i 个结点之前插入元素,修改的是第 i-1 个结点的指针。

(3)时间和空间复杂度分析

时间复杂度O(n)2.1.3 链表删除一个元素的算法

(1)算法思想分析

要删除一个结点,必须修改指针并且释放空间。(2)要点描述

找到线性表中第i-1个结点,修改其指向后继的指针。

(3)时间和空间复杂度分析

时间复杂度O(n)

3.1 ADT描述

ADT LinkList{

数据对象:D={ e | e∈LNode }

数据关系:R1={ | e∈LNode ,e >0}

基本操作:

GreateList_L(&L, n)

操作结果:构造了一个长为n的数据链表

ListDelete_L(&L, i, &e)

初始条件:链表L已存在而且非空

操作结果:删除L的第i个数据,并且用e返回其值

ListInsert_L(&L, i, e)

初始条件:链表L已存在

操作结果: 在L的第i个位置插入数据e

GetElem(L, i, e)

初始条件:链表L已存在

操作结果:用e返回L中的第i个数据 }ADT LinkList

4.1

详细设计 4.1.1数据存储结构设计

采用单链式线性表实现

4.1.2

主要伪代码

Status GetElem(LinkList L, int i, ElemType *e){ int j=0;int d;LinkList p = L;while(p&&jnext;j++;

} if(!p || j > i)return ERROR;printf(“您要查询的元素是:n”);d=p->data;printf(“%d”,d);printf(“n”);}

void InitList(LinkList *L){ *L =(LinkList)malloc(sizeof(struct LNode));if(!*L)exit(OVERFLOW);(*L)->next = NULL;}

Status ListInsert(LinkList L, int i, ElemType e){ int j = 0;LinkList p = L, s;while(p && j < i-1){ p = p->next;j++;} if(!p|| j > i-1)return ERROR;s =(LinkList)malloc(sizeof(struct LNode));s->data = e;s->next = p->next;p->next = s;return OK;}

Status ListDelete(LinkList L, int i, ElemType *e){ int j = 0;LinkList p = L, q;while(p->next && j < i-1){ p = p->next;

j++;} if(!p->next || j > i-1)return ERROR;q = p->next;p->next = q->next;*e = q->data;free(q);return OK;}

void ListTraverse(LinkList L, void(*vi)(ElemType)){ LinkList p = L->next;while(p){ vi(p->data);p = p->next;} printf(“n”);}

void ListPrint(LinkList L){ LinkList p = L->next;while(p){ printf(“%d ”, p->data);p = p->next;} printf(“n”);}

void printInt(int data){ printf(“%d ”, data);}.软件测试

图一(主界面)

图二(插入学生信息)

图三(显示所有学生信息)

图四(查询个人信息)

图五(统计信息)

图六(修改信息)

图七(保存数据)

图八(删除信息)

心得体会

通过本程序的设计,我对数据结构作了以下总结:要解决一道程序题必须先要认真捕捉改程序中的有用信息,找出解决方法。先规划好,程序需要什么样的数据结构,什么函数,对程序有什么要求。然后从整体把握对程序设计进行分工,相应地把程序分成若干模块,具体实现各部分实行相应的功能。一个程序要顺利地进行设计,一是要对程序的功能有全面的了解,如果漏了某些部分,都会使得这个程序调试不出来或者是令该程序没有达到预想的效果。其次,在程序的编译中,必须注重程序设计过程中的细节,像单链表的程序,就要理解链表的概念,理解链表的数据特点,要清楚知道数据域和指针域的作用,否则,很容易会浪费大量时间在检测错误上面。要说到解题的思考方向,如果要总结成规律,我认为要灵活的进行方法的设计,通过不同的方法来实现不同的功能,如通过结点的插入来实现链表的创建。同时应该注意各种语句的选择,要先预想好需要什么样的语句来实现函数定义,尽量简单快捷地完成,避免出错。

要规范面向对象程序设计师的书写协管,在这次课程设计中,我们再次感受到,规范的程序书写,可以更好的进行后期的差错补漏。还应该注意各种面向对象语言语法的运用,例如继承的方法,都要严格按照语法来进行,否则很容易就会出现错误,甚至严重影响课程设计的进度。

源代码

#include “stdio.h” #include “stdlib.h” #include “string.h” int shoudsave=0;// struct student {

char num[10];//学号

char name[20];

char sex[4];

int cgrade;

int mgrade;

int egrade;

int totle;

int ave;

char neartime[10];//最近更新时间

};

typedef struct node {

struct student data;

struct node *next;}Node,*Link;

int menu(){

char m[3];

int n;

printf(“ ************************欢迎进入学生成绩管理系统******************************nn”);

printf(“t欢迎使用本学生管理系统,本系统将为您提供历史学生信息查询,学生成绩信息管理功能。n”);

printf(“********************************************************************************”);

printf(“t1输入学生资料ttttt2删除学生资料n”);

printf(“t3查询学生资料ttttt4修改学生资料n”);

printf(“t5显示学生资料ttttt6统计学生成绩n”);

printf(“t7保存学生资料n”);

printf(“ttplease choose a operation(1-7):n”);

printf(“***********************************************************************

*********n”);

scanf(“%s”,m);

n=atoi(m);

return(n);}

void printstart(){

printf(“---------n”);}

void Wrong(){

printf(“n=====>提示:输入错误!n”);}

void Nofind(){

printf(“n=====>提示:没有找到该学生!n”);}

void printc()// 本函数用于输出中文

{

printf(“学号t 姓名

性别

英语成绩 数据库成绩 数据结构成绩

总分平均分n”);}

void printe(Node *p)//本函数用于输出英文

{

printf(“%-12s%stt%st%dtt%dt%dt%dt %dn”,p->data.num,p->data.name,p->data.sex,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.totle,p->data.ave);}

Node* Locate(Link l,char findmess[],char nameornum[])//该函数用于定位连表中符合要求的接点,并返回该指针

{

Node *r;

if(strcmp(nameornum,“num”)==0)//按学号查询

{

r=l->next;

while(r!=NULL)

{

if(strcmp(r->data.num,findmess)==0)

return r;

r=r->next;

}

}

else if(strcmp(nameornum,“name”)==0)//按姓名查询

{

r=l->next;

while(r!=NULL)

{

if(strcmp(r->data.name,findmess)==0)

return r;

r=r->next;

}

}

return 0;}

void Add(Link l)//增加学生

{

Node *p,*r,*s;

char num[10];

r=l;

s=l->next;

while(r->next!=NULL)

r=r->next;//将指针置于最末尾

while(1)

{

printf(“请你输入学号(以'0'返回上一级菜单:)”);

scanf(“%s”,num);

if(strcmp(num,“0”)==0)

break;

while(s)

{

if(strcmp(s->data.num,num)==0)

{

printf(“=====>提示:学号为'%s'的学生已经存在,若要修改请你选择'4 修改'!n”,num);

printstart();

printc();

printe(s);

printstart();

printf(“n”);

return;

}

s=s->next;

}

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

strcpy(p->data.num,num);

printf(“请你输入姓名:”);

scanf(“%s”,p->data.name);

getchar();

printf(“请你输入性别:”);

scanf(“%s”,p->data.sex);

getchar();

printf(“请你输入数据结构成绩:”);

scanf(“%d”,&p->data.cgrade);

getchar();

printf(“请你输入数据库成绩:”);

scanf(“%d”,&p->data.mgrade);

getchar();

printf(“请你输入英语成绩:”);

scanf(“%d”,&p->data.egrade);

getchar();

p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;

p->data.ave=p->data.totle / 3;

//信息输入已经完成p->next=NULL;

r->next=p;

r=p;

shoudsave=1;

} }

void Qur(Link l)//查询学生

{

char findmess[20];

Node *p;

if(!l->next)

{

printf(“n=====>提示:没有资料可以查询!n”);

return;

}

printf(“请你输入要查找的学号:”);

scanf(“%s”,findmess);

p=Locate(l,findmess,“num”);

if(p)

{

printf(“tttt查找结果n”);

printstart();

printc();

printe(p);

printstart();

}

else

Nofind();}

void Del(Link l)//删除

{

Node *p,*r;

char findmess[20];

if(!l->next)

{

printf(“n=====>提示:没有资料可以删除!n”);

return;

}

printf(“n=====>确定进行删除操作请按 1,按其他按键退出该操作nnnn”);

if(menu()==1)

{

printf(“请你输入要删除的学号:”);

scanf(“%s”,findmess);

p=Locate(l,findmess,“num”);

if(p)

{

r=l;

while(r->next!=p)

r=r->next;

r->next=p->next;

free(p);

printf(“n=====>提示:该学生已经成功删除!n”);

shoudsave=1;

}

else

Nofind();

}

else

exit;}

void Modify(Link l)//修改函数 {

Node *p;

char findmess[20];

if(!l->next)

{

printf(“n=====>提示:没有资料可以修改!n”);

return;

}

printf(“请你输入要修改的学生学号:”);

scanf(“%s”,findmess);

p=Locate(l,findmess,“num”);

if(p)

{

printf(“请你输入新学号(原来是%s):”,p->data.num);

scanf(“%s”,p->data.num);

printf(“请你输入新姓名(原来是%s):”,p->data.name);

scanf(“%s”,p->data.name);

getchar();

printf(“请你输入新性别(原来是%s):”,p->data.sex);

scanf(“%s”,p->data.sex);

printf(“请你输入新的数据结构成绩(原来是%d分):”,p->data.cgrade);

scanf(“%d”,&p->data.cgrade);

getchar();

printf(“请你输入新的数据库成绩(原来是%d分):”,p->data.mgrade);

scanf(“%d”,&p->data.mgrade);

getchar();

printf(“请你输入新的英语成绩(原来是%d分):”,p->data.egrade);

scanf(“%d”,&p->data.egrade);

p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;

p->data.ave=p->data.totle/3;

printf(“n=====>提示:资料修改成功!n”);

shoudsave=1;

}

else

Nofind();

}

void Disp(Link l)//显示函数 {

int count=0;

Node *p;

p=l->next;

if(!p)

{

printf(“n=====>提示:没有资料可以显示!n”);

return;

}

printf(“tttt显示结果n”);

printstart();

printc();

printf(“n”);

while(p)

{

printe(p);

p=p->next;

}

printstart();

printf(“n”);}

void Tongji(Link l)//统计函数 {

Node *pm,*pe,*pc,*pt,*pa;//用于指向分数最高的接点

Node *r=l->next;

if(!r)

{

printf(“n=====>提示:没有资料可以统计!n”);

return;

}

pm=pe=pc=pt=pa=r;

while(r!=NULL)

{

if(r->data.cgrade>=pc->data.cgrade)

pc=r;

if(r->data.mgrade>=pm->data.mgrade)

pm=r;

if(r->data.egrade>=pe->data.egrade)

pe=r;

if(r->data.totle>=pt->data.totle)

pt=r;

if(r->data.ave>=pa->data.ave)

pa=r;

r=r->next;

}

printf(“------------------------------统计结果-n”);

printf(“总分最高者:t%s %d分n”,pt->data.name,pt->data.totle);

printf(“平均分最高者:t%s %d分n”,pa->data.name,pa->data.ave);

printf(“英语最高者:t%s %d分n”,pe->data.name,pe->data.egrade);

printf(“数据库最高者:t%s %d分n”,pm->data.name,pm->data.mgrade);

printf(“数据结构最高者:t%s %d分n”,pc->data.name,pc->data.cgrade);

printstart();}

void Save(Link l)//保存函数 {

FILE* fp;

Node *p;

int flag=1,count=0;

fp=fopen(“c:student”,“wb”);

if(fp==NULL)

{

printf(“n=====>提示:重新打开文件时发生错误!n”);

exit(1);

}

p=l->next;

while(p)

{

if(fwrite(p,sizeof(Node),1,fp)==1)

{

p=p->next;

count++;

}

else

{

flag=0;

break;

}

}

if(flag)

{

printf(“n=====>提示:文件保存成功.(有%d条记录已经保存.)n”,count);

shoudsave=0;

}

fclose(fp);}

void main(){

Link l;//连表

FILE *fp;//文件指针

char ch;

char jian;

int count=0;

Node *p,*r;

l=(Node*)malloc(sizeof(Node));

l->next=NULL;

r=l;

fp=fopen(“C:student”,“rb”);

if(fp==NULL)

{

fp=fopen(“C:student”,“wb”);

exit(0);

}

printf(“n=====>提示:文件已经打开,正在导入记录......n”);

while(!feof(fp))

{

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

if(fread(p,sizeof(Node),1,fp))//将文件的内容放入接点中

{

p->next=NULL;

r->next=p;

r=p;//将该接点挂入连中

count++;

}

}

fclose(fp);//关闭文件

printf(“n=====>提示:记录导入完毕,共导入%d条记录.n”,count);

for(;;)

{

switch(menu())

{

case 1:Add(l);break;//增加学生

case 2:Del(l);break;//删除学生

case 3:Qur(l);break;//查询学生

case 4:Modify(l);break;//修改学生

case 5:Disp(l);break;//显示学生

case 6:Tongji(l);break;//统计学生

case 7:Save(l);break;//保存学生

default: Wrong();

getchar();

break;

}

}

}

参考文献

《数据结构(C语言版)》----------------清华大学出版社 严蔚敏 吴伟民 编著 《C语言程序设计》------------------------中国铁道出版社 丁峻岭 余坚 编著

第五篇:图书管理系统 数据结构 课程设计

《数据结构》

课程设计报告书

一.课程设计题目

图书借阅管理系统

二.课程设计内容

实现图书管理信息系统的设计

(一)管理员功能:

①登录:输入管理员密码,若密码错误则不得执行管理员操作。

②添加新书:增加新的图书资料,同时需检查新书的图书编号是否已存在于原图书资料中,若已存在则应取消添加或提示重新输入。

③修改图书:通过编号查询该图书资料,若该编号存在,则显示已有信息,允许修改,否则提示 无该图书信息。

④删除图书:通过编号查询该图书资料,若该编号存在,则显示已有信息,允许删除,否则提示无该图书信息。删除对象包括该图书资料以及“图书状态”和“借阅人”中与此书相关的所有记录。

⑤查找图书:

A.按书号查找:通过编号查询该图书资料,若该编号存在,则显示图书信息,否则提示无该图书信息。

B.按书名查找:通过书名查询该图书资料,若该编号存在,则显示图书信息,否则提示无该图书信息。

C.按作者查找:通过作者查询该图书资料,若该编号存在,则显示图书信息,否则提示无该图书信息。

⑥查看全部图书:显示所有图书资料,包括书号、书名、作者、状态和借阅人等信息。

⑦修改读者:通过姓名查询该读者信息,若该姓名存在,则显示已有信息,允许修改,否则提示无该读者信息。

⑧删除读者:通过姓名查询该读者信息,若该姓名存在,则显示已有信息,允许删除,否则提示无该读者信息。删除对象包括该读者姓名、班级、电话以及“图书状态”和“借阅人”中与此人相关的所有记录。

⑨查看所有读者:显示所有读者资料,包括姓名、班级、电话等信息。

(二)读者功能:

①登录:输入读者姓名,若未经注册则不得进入读者服务界面。②注册:新用户经注册方可登录系统并使用读者服务功能。③借书:

A.输入所需图书编号,判断该编号是否存在,若不存在则提示重新输入。

B.若所输入图书编号存在,则判断该书籍是否已被借出,若已借则不允许执行借书操作。

C.若所输入图书未借,则提示输入读者姓名,判断所输入读者姓名是否存在,若不存在则提示重新输入。D.若读者姓名存在,则允许执行借书操作。

E.借书处理包括在“图书状态”中加上“已借”标记。④还书:

A.输入所借书编号,判断该编号是否存在,若不存在则提示重新输入。B.判断该书是否已借出,若未借则不允许执行还书操作。C.借书处理包括在“图书状态”中加上“未借”标记。⑤查询图书:

A.按书号查找:通过编号查询该图书资料,若该编号存在,则显示图书信息,否则提示无该图书信息。

B.按书名查找:通过书名查询该图书资料,若该编号存在,则显示图书信息,否则提示无该图书信息。

C.按作者查找:通过作者查询该图书资料,若该编号存在,则显示图书信息,否则提示无该图书信息。

⑥查看借阅情况:输入读者姓名,若该姓名不存在则提示重新输入,若该姓名存在则显示该读者借阅信息。

三.算法设计

1.流程图(部分示例)

①管理员登录

②读者登录

③读者借阅图书

④管理员或读者按书名查找图书

2.代码实现

#include #include

#include #include //文件流 #include #define BookFile “book.txt”

//将字符串BookFile替换原文件中的宏名称book #define ReaderFile “reader.txt” using namespace std;//**********读者结构体,用于存放读者基本信息********** class Reader {

private:

char rname[10];

char rclass[10];

char rtel[10];public:

Reader()//构造函数,实现数据初始化

{strcpy(rname,“");strcpy(rclass,”“);strcpy(rtel,”“);} //初始化

void set_rname(char *rn)//设置读者姓名

{strcpy(rname,rn);} //将rn的字符复制给rname

char * get_rname()//获得读者姓名

{return rname;} //返回rname的值

void set_rclass(char *rc)//设置班级

{strcpy(rclass,rc);}

char *get_rclass()

//获得班级

{return rclass;}

void set_rtel(char *rt)

//设置电话

{strcpy(rtel,rt);}

char *get_rtel()

//获得电话

{return rtel;}

void copy(Reader m)//读者Reader结构体copy函数

{strcpy(rname,m.get_rname());strcpy(rclass,m.get_rclass());strcpy(rtel,m.get_rtel());} };//*********读者管理结构体,实现对读者用户的管理********* class ReaderManage {

Reader readers[50];//定义读者结构体数组对象,最多50位

int length;

void readFile()

//读取读者文件函数

{

ifstream fread;//定义输入文件流对象fread

length=0;

//计数

if(!fread)

{cout<<”读取磁盘文件失败!“<

fread.open(ReaderFile,ios::binary);//使文件流与文件关联,以二进制方式打开

int i=0;

while((fread.read((char *)&readers[i],sizeof(Reader))))//计算并返回所占字节数

i++;

length=i;

fread.close();//关闭磁盘文件

} void saveFile()//保存读者文件

{

ofstream fwrite;

//定义输出文件流对象fwrite

if(!fwrite)

{cout<<”文件保存失败!n“;exit(1);}

fwrite.open(ReaderFile,ios::binary);//使文件流与文件关联,以二进制方式打开

fwrite.write((char *)readers,length*sizeof(Reader));//计算并返回所占字节数

fwrite.close();//关闭磁盘文件

} public:

ReaderManage()//构造函数,读取读者文件

{readFile();}

~ReaderManage()//析构函数,保存读者文件

{saveFile();}

void add_reader(Reader r)//添加读者用户函数

{

if(length>=50)

{cout<<”对不起,注册人数已满!n“;return;}

readers[length].copy(r);//调用读者结构体copy函数

length++;} int search(char *rn)//按姓名查找读者函数

{

for(int i=0;i

if(strcmp(readers[i].get_rname(),rn)==0)//判断是否相等

return i;

return-1;

} bool revise(Reader reader,int i)//修改读者资料函数

{

readers[i].copy(reader);//调用读者结构体cpoy函数

return true;} void delete_reader(int index)//删除读者函数

{

for(int i=index;i

readers[i].copy(readers[i+1]);//用后面的地址覆盖前面的地址

length--;} bool log_reader(Reader r)//登录时判断读者用户是否存在函数,相当于遍历

{

for(int i=0;i

if(strcmp(readers[i].get_rname(),r.get_rname())==0)

return true;

return false;

} void reg_reader()//注册用户函数

{

char n[10];

//姓名name

char c[10];

//班级class

char t[10];

//电话tel

Reader reader;

cout<<”nt请输入您的姓名:“;

cin>>n;

cout<<”nt请输入您的所在班级:“;

cin>>c;

cout<<”nt请输入您的联系电话:“;

cin>>t;

reader.set_rname(n);//调用读者结构体设置读者姓名函数

reader.set_rclass(c);//调用读者结构体设置读者班级函数

reader.set_rtel(t);//调用读者结构体设置联系电话函数

add_reader(reader);//调用读者结构体添加读者函数

cout<<”nt注册成功!“;} void show_reader()//不带参的显示读者信息函数

{ cout<<”n ☆☆☆☆☆☆☆☆☆☆☆☆读★★者★★信★★息★★列★★表☆☆☆☆☆☆☆☆☆☆☆nn“;

cout<<”姓名ttt班级ttt电话n“;

for(int i=0;i

{

cout<

cout<<”ttt“<

cout<<”ttt“<

} } void show_reader(int i)//带参的显示读者信息函数

{

cout<<”n ☆☆☆☆☆☆☆☆☆☆☆☆读★★者★★信★★息★★列★★表☆☆☆☆☆☆☆☆☆☆nn“;

cout<<”姓名ttt班级ttt电话n“;

cout<

cout<<”ttt“<

cout<<”ttt“<

}

};

//********书籍结构体,用于存放书籍基本信息******** class Book { private:

char bnum[10];

//书号

char bname[20];

//书名

char bauthor[10];

//作者

char rname[10];

//借阅人 public: int tag;

//状态标记判断指标(已借/在架)Book()

//构造函数初始化信息

{strcpy(bnum,”“);strcpy(bname,”“);strcpy(bauthor,”“);strcpy(rname,”“);tag=0;}

void set_bnum(char *no)

//设置书号

{strcpy(bnum,no);}

//把字符串no中的字符复制到字符串bnum中

char *get_bnum()

//获得书号

{

return bnum;}

//返回值为bnum

void set_bname(char *n)

//设置书名

{strcpy(bname,n);}

char *get_bname()

//获得书名

{return bname;}

void set_bauthor(char *a)

//设置作者

{strcpy(bauthor,a);}

char * get_bauthor()

//获得作者姓名

{return bauthor;}

void set_tag(int t)

//状态设置

{tag=t;}

void set_rname(char *rn)

//设置借阅人

{strcpy(rname,rn);}

char *get_rname()

//获得借阅人姓名

{return rname;}

void show_tag()

//显示图书状态

{

if(tag==1)

{cout<<”已借“;}

else

{cout<<”在架“;}

}

void copy(Book m)

//Book结构体copy函数

{

strcpy(bnum,m.get_bnum());

//将获得书号函数里的返回值里的字符复制到bnum

strcpy(bname,m.get_bname());

strcpy(bauthor,m.get_bauthor());

tag=0;

} };//**********书籍管理结构体,实现管理书籍功能********** class BookManage { private:

Book books[100];

//定义Book书籍结构体数组对象,最大容量100本

int length;

void saveFile()

//保存书籍文件

{

ofstream fwrite;//定义输出文件流ofstream结构体对象fwrite

if(!fwrite)

{cout<<”文件保存失败!n“;exit(1);

}

fwrite.open(BookFile,ios::binary);//使文件流与文件建立关联,以二进制方式打开

fwrite.write((char *)books,length*sizeof(Book));//计算并返回所占字节数

fwrite.close();

//关闭磁盘文件

} void readFile()

//读取书籍文件

{

ifstream fread;//定义输入文件流对象fread

length=0;

if(!fread)

{cout<<”文件读取失败!“<

Book temp;

//定义书籍结构体临时对象temp

int i=0;

fread.open(BookFile ,ios::binary);//使文件流与文件建立关联,以二进制方式打开

while((fread.read((char *)&books[i],sizeof(Book))))

i++;

//每读完一次,指针后移一位,直到不能读出正确结果为止

length=i;

fread.close();} public:

BookManage()

//构造函数,读取磁盘文件

{

length=0;

//从头读起,计数,最大100

readFile();

//调用读取文件函数

}

~BookManage()

//析构函数,保存磁盘文件

{

saveFile();

//调用保存文件函数

}

bool add(Book book)

//添加图书资料

{

if(length>=100)

{ cout<<”对不起,储存已满,您无法继续添加!n“;

return-1;

}

else

{

books[length].copy(book);//调用书籍结构体copy函数

length++;

return(length-1);

} } int bnu_search(char *bnu)

//按书号查找书籍

{

for(int i=0;i

if(strcmp(books[i].get_bnum(),bnu)==0)//字符串比较,判断是否相等

return i;

return-1;

} int bna_search(char *bna)

//按书名查找书籍

{

for(int i=0;i

if(strcmp(books[i].get_bname(),bna)==0)//判断

return i;

return-1;

} int bau_search(char *bau)//按作者查找书籍

{

for(int i=0;i

if(strcmp(books[i].get_bauthor(),bau)==0)//判断

return i;

return-1;

}

int rn_search(char *rn)//按借阅人查找书籍

{

for(int i=0;i

if(strcmp(books[i].get_rname(),rn)==0)//判断

return i;

return-1;

}

void revise(Book book,int i)//带参的修改书籍函数

{books[i].copy(book);} //调用Book结构体copy函数

void deleteBook(int index)//带参的删除书籍资料函数

{

for(int i=index;i

books[i].copy(books[i+1]);//用后面的地址将当前的地址覆盖

length--;

} void show_book()//不带参的显示书籍函数

{

cout<<” ☆☆☆☆☆☆☆☆☆☆☆书★★籍★★信★★息★★列★★表☆☆☆☆☆☆☆☆☆☆☆nn“;

cout<<”书号“;

cout.width(10);

cout<<”书名“;

cout.width(10);

cout<<”作者“;

cout.width(17);

cout<<”状态“;

cout.width(25);

cout<<”借阅人n“;

for(int i=0;i

{ cout<

cout.width(10);

cout<

cout.width(10);

cout<

cout.width(20);

books[i].show_tag();

cout.width(20);

cout<

}

} void show_book(int i)//带参的显示书籍函数

{ cout<<” ☆☆☆☆☆☆☆☆☆☆☆书★★籍★★信★★息★★列★★表☆☆☆☆☆☆☆☆☆☆☆nn“;

cout<<”书号“;

cout.width(10);

cout<<”书名“;

cout.width(10);

cout<<”作者“;

cout.width(17);

cout<<”状态“;

cout.width(25);

cout<<”借阅人n“;

cout<

cout.width(10);

cout<

cout.width(10);

cout<

cout.width(20);

books[i].show_tag();

cout.width(20);

cout<

}

void br_book()//读者借、还书功能函数

{

ReaderManage reader;

int choi;//选择

int a;

//图书状态指标(1已借2在架)

char sh[10];//需要还书的书号

char dz[10];//读者姓名

cin>>sh;

int index=bnu_search(sh);//定义一个变量等于查找到的书号

if(index>=0)

{ if(books[index].tag==1)//已借

a=1;

if(books[index].tag==0)//在架

a=2;

switch(a)

{ case 1:

cout<<”nt该书目前状态为<已借出>n“;

cout<<”nt请选择您需要的服务:1:还书

0:返回n“;

cin>>choi;

cin.ignore();//清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响

if(choi!=1&&choi!=0)

{

cout<<”nt操作有误,请重新选择(0/1)!n“;

return;

}

else if(choi==1)

{

cout<<”nt请输入您的姓名:“;

cin>>dz;

cin.ignore();

int index1=reader.search(dz);

if(index1==-1)

{

cout<<”nt对不起,系统无该读者记录,新用户请先注册!“;

return;

}

else

{

strcpy(dz,”“);//将读者姓名已空白代替

books[index].set_rname(dz);//借阅人一项变为空白

books[index].set_tag(0);//图书状态变为在架

cout<<”nt还书成功!“<

}

}break;

case 2:

cout<<”nt该书目前状态为<在馆>n“;

cout<<”nt请您需要的服务:1:借书

0:返回n“;

cin>>choi;

cin.ignore();

if(choi!=1&&choi!=0)

{

cout<<”nt操作有误,请重新选择(0/1)!n“;

return;

}

else if(choi==1)

{

cout<<”nt请输入您的姓名:“;

cin>>dz;

int index1=reader.search(dz);

if(index1==-1)

{ cout<<”nt对不起,系统无改读者记录,新用户请先注册!“;

return;

}

else

{

books[index].set_rname(dz);

books[index].set_tag(1);

cout<<”nt借书成功!“<

}

}break;

}

}

else

{

cout<<”nt对不起,系统无该书记录!“;}

}

bool in(int i)//判断图书是否在架函数

{

if(books[i].tag==1)

return false;

return true;

}

};//**********菜单结构体,实现界面引导********** class Menu {

BookManage bm;

//定义书籍管理结构体对象bm ReaderManage rm;

//定义读者管理结构体对象rm Reader r;

//定义读者结构体对象r private: int choice;

//菜单序号选择

int key;

//管理员密码 public: void header()

//页眉

{

system(”color fd“);

cout<<”t

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

cout<<”t

☆n“;

cout<<”t

☆n“;

cout<<”t

☆n“;

cout<<”t

☆n“;

cout<<”t

☆n“;

cout<<”t

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;} void log_menu()

//主界面登录菜单

{

system(”color fd“);

header();

cout<<”nttt< 请

份 >n“;

cout<<”ntttt1: 管理员nntttt2: 读

者nntttt0: 退

出nt您的选择是: “;choice: cin>>choice;

cin.ignore();

//清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响

switch(choice)

{

case 1:

log_admin();

//管理员登录,需密码验证

break;

case 2:

reader_lr();

//读者登录或注册

break;

case 0:

exit(1);

//退出系统

break;

default:

cout<<”nt您的操作有误,请重新选择(0→2): “;

goto choice;

} } void admin_menu()

//管理员管理菜单

{

system(”cls“);

system(”color f9“);

cout<<”t

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

cout<<”t

☆n“;

cout<<”t

系★统★管★理★界★面

☆n“;

cout<<”t

☆n“;

cout<<”t

1: 添加新的图书资料

2: 修改已有图书资料

☆n“;

cout<<”t

☆n“;

cout<<”t

3: 删除已有图书资料

4: 查找已有图书资料

☆n“;

cout<<”t

☆n“;

cout<<”t

5: 查看所有图书资料

6: 修改读者用户信息

☆n“;

cout<<”t

☆n“;

cout<<”t

7: 删除读者用户信息

8: 查看所有读者信息

☆n“;

cout<<”t

☆n“;

cout<<”t

9: 返回系统登录界面

0: 退出图书管理系统

☆n“;

cout<<”t

☆n“;

cout<<”t

☆n“;

cout<<”t

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

cout<<”nt请选择您需要的服务序号: “;choice: cin>>choice;

cin.ignore();

switch(choice)

{

case 1:

//添加图书

addBook();

bm.~BookManage();

break;

case 2:

//修改图书

reviseBook();

bm.~BookManage();

break;

case 3:

//删除图书

delBook();

bm.~BookManage();

break;

case 4:

//查找图书

absearch_menu();

break;

case 5:

//查看全部图书

bm.show_book();

cout<<”nt显示完毕!“;

system(”pause“);

admin_menu();

break;

case 6:

//修改读者

reviseReader();

rm.~ReaderManage();

break;

case 7:

//删除读者

delReader();

rm.~ReaderManage();

break;

case 8: //查看所有读者

rm.show_reader();

cout<<”nt显示完毕!“;

system(”pause“);

admin_menu();

break;

case 9: //返回系统登录界面

system(”cls“);

log_menu();

case 0: //退出系统

exit(1);

break;

default:

cout<<”nt您的操作有误,请重新选择(0→7): “;

goto choice;

} } void reader_menu()

//读者服务菜单

{

system(”cls“);

system(”color f9“);

cout<<”t

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

cout<<”t

☆n“;

cout<<”t

读★者★服★务★界★面

☆n“;

cout<<”t

☆n“;

cout<<”t

1: 借 阅 图 书

2: 归 还 图 书

☆n“;

cout<<”t

☆n“;

cout<<”t

3: 查 找 图 书

4: 借 阅 情 况

☆n“;

cout<<”t

☆n“;

cout<<”t

5: 返 上 一 级

0: 退 出 系 统

☆n“;

cout<<”t

☆n“;

cout<<”t

☆n“;

cout<<”t

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

cout<<”nt请选择您需要的服务序号: “;choice: cin>>choice;

cin.ignore();

switch(choice)

{

case 1:

cout<<”nt请输入您欲借阅的图书书号: “;

bm.br_book();

bm.~BookManage();

break;

case 2:

cout<<”nt请输入您欲归还的图书书号: “;

bm.br_book();

bm.~BookManage();

break;

case 3:

bsearch_menu();

break;

case 4:

rn_search();

break;

case 5:

system(”cls“);

reader_lr();

break;

case 0:

exit(1);

break;

default:

cout<<”nt您的操作有误,请重新选择(0→5):

goto choice;

} } void bsearch_menu()

//读者查找书籍菜单

{

system(“color f2”);

cout<<“ttt☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n”;cout<<“ttt☆

☆n”;

cout<<“ttt☆

书★籍★查★找★界★面

☆n”;

cout<<“ttt☆

☆n”;

cout<<“ttt☆

1: 按 书号查找

☆n”;

cout<<“ttt☆

☆n”;

cout<<“ttt☆

2: 按 书名查找

☆n”;

cout<<“ttt☆

☆n”;

cout<<“ttt☆

3: 按 作者查找

☆n”;

cout<<“ttt☆

☆n”;

cout<<“ttt☆

4: 返 回 上 级

☆n”;

cout<<“ttt☆

☆n”;

cout<<“ttt☆

0: 退 出 系 统

☆n”;cout<<“ttt☆

☆n”;

cout<<“ttt☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n”;

int bsc;//book search choice cout<<“nt请输入您需要的服务序号: ”;

cin>>bsc;

cin.ignore();

switch(bsc){

case 1:

bnu_search();

break;

case 2:

bna_search();

“;

break;

case 3:

bau_search();

break;

case 4:

reader_menu();

break;

case 5:

exit(1);

default:

cout<<”nt操作有误,请重新选择<0→4>“;

break;

}

}

void absearch_menu()

//管理员查找书籍菜单

{

system(”color f2“);

cout<<”ttt☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

cout<<”ttt☆

☆n“;

cout<<”ttt☆

书★籍★查★找★界★面

☆n“;

cout<<”ttt☆

☆n“;

cout<<”ttt☆

1: 按 书号查找

☆n“;

cout<<”ttt☆

☆n“;

cout<<”ttt☆

2: 按 书名查找

☆n“;

cout<<”ttt☆

☆n“;

cout<<”ttt☆

3: 按 作者查找

☆n“;

cout<<”ttt☆

☆n“;

cout<<”ttt☆

4: 返 回 上 级

☆n“;

cout<<”ttt☆

☆n“;

cout<<”ttt☆

0: 退 出 系 统

☆n“;

cout<<”ttt☆

☆n“;

cout<<”ttt☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

int bsc;//book search choice

cout<<”nt请输入您需要的服务序号: “;

cin>>bsc;

cin.ignore();

switch(bsc)

{

case 1:

bnu_search();

break;

case 2:

bna_search();

break;

case 3:

bau_search();

break;

case 4:

admin_menu();

break;

case 5:

exit(1);

default:

cout<<”nt操作有误,请重新选择<0→4>“;

break;

}

} void reader_lr()//读者登录或注册菜单 {

system(”cls“);

header();

system(”color f1“);

cout<<”nttt< 读

面 >n“;

cout<<”nttt

1: 登

录t2: 注

册nnttt

3: 返

回t0: 退

出nt您的选择是: “;

int rlc;//reader login choice choice: cin>>rlc;

cin.ignore();

switch(rlc)

{

case 1:

//已注册读者登录

cout<<”nt请输入您的姓名: “;

char rn[10];//reader name

cin>>rn;

r.set_rname(rn);

if(rm.log_reader(r))

{

cout<<”nt登录成功!“;

system(”pause“);

reader_menu();

}

else

cout<<”nt登录失败!新用户请先注册!“;

system(”pause“);

reader_lr();

break;

case 2:

//新用户注册

rm.reg_reader();

rm.~ReaderManage();

system(”pause“);

reader_lr();

break;

case 3:

system(”cls“);

log_menu();

case 0:

exit(1);

break;

default:

cout<<”nt您的操作有误,请重新选择(0→2):

goto choice;

} } void log_admin()

//管理员登录

{

cout<<“nt请输入管理员密码:”;

int key;

cin>>key;

if(key==14125)

{

cout<<“nt登录成功!nnt”;

system(“pause”);

admin_menu();

//管理员操作菜单

}

else

{cout<<“nt登录失败!原因是密码错误!n”;

cout<<“nt请选择 <1:返回上一级菜单

0:退出系统>

cin>>choice;

cin.ignore();

switch(choice)

”;“;

{

case 1:

system(”cls“);

log_menu();

break;

case 0:

exit(1);

break;

default:

cout<<”nt操作有误,请重新选择(0/1)“;

}

} } void rn_search()

//按书号查找函数

{

char rn[10];//reader name

cout<<”nt请输入您的姓名:“;

cin>>rn;

int index=bm.rn_search(rn);

if(index>=0)

bm.show_book(index);

else

cout<<”nt对不起,系统无您的借阅记录!“;

cout<<”nt“;

system(”pause“);

reader_menu();

} void bnu_search()

//按书号查找函数

{

char bnu[10];

cout<<”nt请输入您要查找的书号:“;

cin>>bnu;

int index=bm.bnu_search(bnu);

if(index>=0)

bm.show_book(index);

else

cout<<”nt对不起,系统无该书籍记录!“;

cout<<”nt“;

system(”pause“);

bsearch_menu();

}

void bna_search()

//按书名查找函数

{

cout<<”nt请输入您要查找的书名:“<

char bna[20];

cin>>bna;

int index=bm.bna_search(bna);

if(index>=0)

bm.show_book(index);

else

cout<<”nt对不起,系统无该书籍记录!“;

cout<<”nt“;

system(”pause“);

bsearch_menu();

}

void bau_search()

//按作者查找函数

{

cout<<”nt请输入您要查找的作者:“<

char bau[10];

cin>>bau;

int index=bm.bau_search(bau);

if(index>=0)

bm.show_book(index);

else

cout<<”nt对不起,系统无该书籍记录!“;

cout<<”nt“;

system(”pause“);

bsearch_menu();

}

void addBook()

//新增书籍函数

{ char numb[10];

//书号

char nameb[20];

//书名

char authorb[10];//作者

Book book;

//书籍结构体对象book

int tag1;input1:cout<<”nt请输入新书书号:“;

cin>>numb;

int index=bm.bnu_search(numb);

if(index==-1)

{

cout<<”nt系统目前尚无该书记录,您可以继续操作!n“;

cout<<”nt请输入新书书名:“;

cin>>nameb;

cout<<”nt请输入新书作者:“;

cin>>authorb;

tag1=0;

book.set_bnum(numb);

book.set_bname(nameb);

book.set_bauthor(authorb);

book.set_tag(tag1);

bm.add(book);

cout<<”nt恭喜您!新书资料录入成功!“;

}

else

{

cout<<”nt对不起,该书号纪录已存在!请重新输入!“;

goto input1;

}

system(”pause“);

admin_menu();} void reviseBook()

//修改书籍函数

{

char numb[10];

char nameb[20];

char authorb[10];

Book book;

int index=-1;input2: cout<<”nt请输入您要修改书籍的书号:“;

cin>>numb;

index=bm.bnu_search(numb);

if(index==-1)

{

cout<<”nt对不起,您输入的书号不存在,请重新输入!“<

goto input2;

return;

}

bool sta=bm.in(index);//判断是否在馆

if(sta)

{ cout<<”nt该书目前处于<在架>状态,您可以继续操作!“;

cout<<”nt请输入更改后的书名:“;

cin>>nameb;

cout<<”nt请输入更改后的作者:“;

cin>>authorb;

book.set_bnum(numb);

book.set_bname(nameb);

book.set_bauthor(authorb);

bm.revise(book,index);

cout<<”nt恭喜您!书籍资料修改成功!“;}

else

cout<<”nt该书已被借出,请于读者归还后再进行相关操作!“<

system(”pause“);

admin_menu();

} void delBook()

//删除书籍函数

{

char numb[10];

cout<<”nt请输入您要删除书籍的书号:“;

cin>>numb;

int index=bm.bnu_search(numb);

if(index>=0)

{

cout<<”nt您确定要删除该书记录吗(y/n)

“;

char y;

cin>>y;

if(y=='y'||y=='Y')

{

bm.deleteBook(index);

cout<<”nt删除成功!“;

}

else

cout<<”nt删除取消!“;

}

else

cout<<”nt对不起,系统没有该图书记录!“;

system(”pause“);

admin_menu();

} void reviseReader()//修改读者用户函数

{

char namer[10];

Reader reader;get1:

cout<<”nt请输入你要修改读者用户的姓名: “;

cin>>namer;

int index=rm.search(namer);

if(index==-1)

{

cout<<”nt对不起,系统无改读者记录,重新输入请按1,返回请按0:

int a;

cin>>a;get2:

cin.ignore();

switch(a)

{

case 1:

goto get1;

break;

case 0:

system(“pause”);

admin_menu();

break;

default:

cout<<“nt您的操作有误,请重新选择(0/1):

”;

goto get2;

}

return;

}

“;

else

{

char namer[10];

char classr[10];

char telr[10];

Reader reader;

cout<<”nt请输入更改后的读者姓名:“;

cin>>namer;

cout<<”nt请输入更改后的班级名称:“;

cin>>classr;

cout<<”nt请输入更改后的联系电话:“;

cin>>telr;

reader.set_rname(namer);

reader.set_rclass(classr);

reader.set_rtel(telr);

cout<<”nt是否真的修改该记录(y/n?):“;

char y;

cin>>y;

if(y=='y'||y=='Y')

{ rm.revise(reader,index);

cout<<”nt修改成功!n“;

}

else

cout<<”nt操作取消!n“;

}

system(”pause“);

admin_menu();

}

void delReader()

//删除读者用户函数

{

cout<<”nt请输入您要删除的读者用户的姓名:“<

char namer[10];

cin>>namer;

int index=rm.search(namer);

if(index>=0)

{

cout<<”nt是否真的删除该记录(y/n?): “;

char y;

cin>>y;

if(y=='y'||y=='Y')

{

rm.delete_reader(index);

cout<<”nt删除成功!n“;

}

else

cout<<”nt操作取消!n“;

}

else

cout<<”nt对不起,系统尚无该读者记录!“;

system(”pause“);

admin_menu();

} };//********主函数******** int main(){

system(”color fd“);Menu menu;//定义菜单结构体对象menu

cout<<”ttt 文计091-1 庞丽萍 200990514125

“;cout<<”ttt

当前日期:2011-6-22 星期三“;cout<<”ttt

当前时间:08:00

“;cout<<”nttt

★ 欢 “;cout<<”★ 迎 “;

} cout<<”★ 进 “;cout<<”★ 入 ★nn";menu.log_menu();return 0;四.程序正确性验证

1主页面

2.管理员登陆页面

3.图书添加

五.课程设计过程中出现的问题、原因及解决方法

1.用户登录密码时,不能使用暗码来保护密码。(未解决成功)2.每个界面都能退出到主页面,而不是直接跳出系统。(以解决)3.书名字长太多影响书籍、作者、数量等之间的一一对应关系。(为解决成功)

六.课程设计的主要收获

通过这几天学习设计图书信息管理系统,认识到一切看似简单的事情只有自己动手做,明白了其中的原理才会更好的把它变成自己的东西。图书管理系统主要用到了文件的输入输出,以及利用简单的顺序查找知识,加深了对数据结构的理解与应用。对于这次的课程设计,首先,许多知识不仅仅只是课本上的,需要我们自己去图书馆或网上收集资料。其次,编程过程终遇到各种错误,需要我们耐心分析,讨论,最后得出正确结果。第三,程序无错,进行调试,然后进行加工修改优化。

七.对今后课程设计的建议

希望老师可以分小组做课程设计,题目可以相应的增大难度。分组可以锻炼团对合作能力,队员可以相互讨论解决问题,彼此能够激发更多的思想,做出更完善的作品,同时也防止了互相拷贝的情况,让每个同学都积极的参与到设计中,而不是坐享其成。

下载图书管理系统(含源代码)c语言_数据结构课程设计报告word格式文档
下载图书管理系统(含源代码)c语言_数据结构课程设计报告.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    C语言课程设计——飞机订票系统源代码

    #include //标准输入、输出头文件 #include //包含字符串函数处理头文件 #include //包含access函数的头文件 #define N 9999 //定义最多的航班数 #define PRINT "%dtt......

    数据结构课程设计—西文图书管理系统

    数据结构课程设计报告 课程名称:数据结构课程设计课设题目: 西文图书管理系统 教师姓名: 郭艳本科生姓名: 王瑞林本科生学号: 20121002932 班号:191124 日期:2014年6月20日 题号......

    图书管理系统源代码

    环植学院深入开展创先争优活动实施方案为贯彻落实中共中央、海南省委、省委教育工委及学校党委“关于在党的基层组织和党员中深入开展创先争优活动”的决定,根据相关文件精神......

    c语言图书管理系统

    C语言——图书管理系统 代码部分: #include #include #include #pragma comment(lib,"libmysql.lib") /*定义数据库相关操作变量*/ MYSQL mysql; // MYSQL_RES *result......

    C语言机票订票管理系统源代码

    #include //标准输入、输出头文件 #include //包含字符串函数处理头文件 #include //包含access函数的头文件 #include #include #include #include #define N 9999 //定......

    c语言实现机票管理系统源代码

    /*1、用户和管理员及航班信息请以英文字母或数字输入*/ /*2、管理员账户为:boss,密码为:123。保存在txt文件中,需要修改请于程序中修改*/ /*3、部分文件读写为二进制读写,所以打......

    vb图书管理系统源代码

    Borbook: Public sqltxt As String Public rno As String '保存读者借书证号 Public bno As String '保存读者图书编号 Public xm As String '保存读者姓名 Public dw As St......

    图书管理系统数据库源代码

    图书管理系统数据库源代码 //创建工程及设计主界面 public class Main extends JFrame { private static final JDesktopPane { DESKTOP_PANE=new JDesktopPane; //桌面......