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

时间:2022-12-21 23:18:12 综合范文

  下面是范文网小编收集的图书管理系统含源代码c语言_数据结构课程设计报告3篇 c语言程序设计图书管理系统报告,供大家阅读。

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

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

#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);} //将单链表中的信息保存到文件中// void save(struct Node *h){

  struct Node *s;FILE *fp;

  char filename[10]=“”;

  fp=fopen(“”,“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);} // 从文件中读取信息并存入单链表中// struct Node *read(){ struct Node *head,*r,*s;FILE *fp;char filename[10]=“”;fp=fopen(“”,“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(“”,“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;

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

  char file[10]=“”;FILE *fp;char name[20];char pwd[10];fp=fopen(“”,“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]=“”;if((fp=fopen(“”,“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

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

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

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

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

  二、实验内容

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

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

  三.实验要求

、分析系统功能

(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:“,”wb+“);/*打开写入文件*/

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

  draw_board(SIZE);

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

{

  printf(”cannot open this filen“);

  exit(0);

}

  printf(”input all %d students's “,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语言_数据结构课程设计报告3

  目录

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

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

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

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

  前言

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

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

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

  概要设计

数据结构设计

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

建立链表的算法

(1)算法思想分析

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

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

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

链表插入一个元素的算法

(1)算法思想分析

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

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

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

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

(1)算法思想分析

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

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

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

  时间复杂度O(n)

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

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

  采用单链式线性表实现

  主要伪代码

  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 “” #include “” #include “” 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->,p->,p->,p->,p->,p->,p->,p->);}

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

{

  node *r;

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

{

  r=l->next;

  while(r!=NULL)

{

  if(strcmp(r->,findmess)==0)

  return r;

  r=r->next;

}

}

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

{

  r=l->next;

  while(r!=NULL)

{

  if(strcmp(r->,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->,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->,num);

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

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

  getchar();

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

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

  getchar();

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

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

  getchar();

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

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

  getchar();

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

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

  getchar();

  p->=p->+p->+p->;

  p->=p-> / 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->);

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

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

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

  getchar();

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

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

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

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

  getchar();

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

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

  getchar();

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

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

  p->=p->+p->+p->;

  p->=p->/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->>=pc->)

  pc=r;

  if(r->>=pm->)

  pm=r;

  if(r->>=pe->)

  pe=r;

  if(r->>=pt->)

  pt=r;

  if(r->>=pa->)

  pa=r;

  r=r->next;

}

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

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

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

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

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

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

  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语言程序设计》------------------------中国铁道出版社 丁峻岭 余坚 编著

图书管理系统含源代码c语言_数据结构课程设计报告3篇 c语言程序设计图书管理系统报告相关文章:

砌体结构课程设计任务书3篇 砌体结构课程设计任务书及计算书

图书室自评自查报告——[精选]3篇(小学图书室自查自评报告)

大数据时代《人力资源管理》课程内容创新研究3篇 人力资源管理迭代创新

[财务管理系统设计原则和步骤]财务管理系统2篇(财务系统如何设计)

省市学籍系统的数据对接工作总结2篇 学籍系统学习心得体会

全市党员发展结构调控的调研报告2篇(发展党员情况调研)

小学音乐课程教学工作计划报告3篇(小学音乐教师教学工作计划)

关于大学课程设计心得体会优秀2022【6篇】(大学生课程设计学习心得万能模板)

课程设计心得体会1【12篇】(java课程设计心得体会)

课程设计心得体会及总结3篇 设计课程心得体会范文