《C++程序设计》实训报告

   《C++程序设计》实训报告

姓名:

     

班级:

学号:

指导老师:

                           年 月

一.实训指导书

1. 目的

《C++程序设计》实训的目的是培养学生综合利用C++语言进行程序设计的能力。通过布置具有一定难度的程序设计题目,帮助学生熟悉程序编写,及时查究错误,独立完成,锻炼学生的分析问题、解决实际问题的能力。

2. 设备及仪器

每人一台微型计算机。

3.内容与步骤

图书信息管理系统,使之能提供以下功能:

1、    系统以菜单方式工作。

2、    借书

3、    还书

4、    图书维护

5、    读者维护

6、    退出:包括返回主界面和退出系统等功能。

设计要求:

1)                  模块化程序设计

2)                  锯齿型书写格式

3)                  上机调试通过

能够较好的完成程序的主体设计,界面友好,功能齐全;程序思路清晰易懂,能够充分利用所学工具实现各项操作。独立力完成实训报告,内容充实、观点明确、新颖。

模块示意图:

4. 参考资料

《C++程序设计》谭浩强编  清华大学出版社

《C++语言程序设计》 温秀梅 等 编  清华大学出版社

5. 注意事项

独立完成任务; 

遵守纪律,不上机时,一定要在教室自习;

评分标准

平时上机表现;

实训报告的质量

6.思考题

如何进一步完善本系统?

7.实训报告的内容要求

1.封面

2. 实训指导书

3. 源程序文件

4. 小结

二.源程序文件

#include<stdio.h>

#include<math.h>

#include<string.h>

#include<stdlib.h>

struct books_list

{

  

   char author[20];              /*作者名*/

   char bookname[20];            /*书名*/

   char publisher[20];          /*出版单位*/

   char pbtime[15];              /*出版时间*/

   char loginnum[10];            /*登陆号*/

   float  price;                 /*价格*/

   char classfy[10];             /*分类号*/

   struct books_list * next;  /*链表的指针域*/

};

     

struct books_list * Create_Books_Doc();     /*新建链表*/

void InsertDoc(struct books_list * head); /*插入*/

void DeleteDoc(struct books_list * head , int num);/*删除*/

void Print_Book_Doc(struct books_list * head);/*浏览*/

void search_book(struct books_list * head); /*查询*/

void info_change(struct books_list * head);/*修改*/

void save(struct books_list * head);/*保存数据至文件*/

/*新建链表头节点*/

struct books_list * Create_Books_Doc()

{

 struct books_list * head;

 head=(struct books_list *)malloc(sizeof(struct books_list)); /*分配头节点空间*/

 head->next=NULL;  /*头节点指针域初始化,定为空*/

 return head;

}

 

/*保存数据至文件*/

void save(struct books_list * head)

{

 struct books_list *p;

 FILE *fp;

 p=head;

 fp=fopen("data.txt","w+"); /*以写方式新建并打开 data.txt文件*/

 fprintf(fp,"┏━━━┳━━━━━┳━━━━━┳━━━━━┳━━━━━━┳━━━┳━━━━┓\n"); /*向文件输出表格*/

 fprintf(fp,"┃登录号┃ 书    名 ┃ 作     者┃ 出版单位 ┃  出版时间  ┃分类号┃  价格  ┃\n");

 fprintf(fp,"┣━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━━╋━━━╋━━━━┫\n");

 /*指针从头节点开始移动,遍历至尾结点,依次输出图书信息*/

 while(p->next!= NULL)

 {

  p=p->next;

  fprintf(fp,"┃%-6.6s┃%-10.10s┃%-10.10s┃%-10.10s┃%-12.12s┃%-6.6s┃%.2f   ┃\n",p->loginnum,p->bookname,p->author,p->publisher,p->pbtime,p->classfy,p->price);

 }

 fprintf(fp,"┗━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━━┻━━━┻━━━━┛\n");

 fclose(fp);

 printf("                   已将图书数据保存到 data.txt 文件\n");

}

/*插入*/

void InsertDoc(struct books_list *head)

{

 /*定义结构体指针变量 s指向开辟的新结点首地址 p为中间变量*/

 struct books_list *s, *p;

 char flag='Y'; /*定义flag,方便用户选择重复输入*/

 p=head;

 /*遍历到尾结点,p指向尾结点*/

 while(p->next!= NULL)

    {

  p=p->next;

 }  

 /*开辟新空间,存入数据,添加进链表*/

 while(flag=='Y'||flag=='y')

 {

  s=(struct books_list *)malloc(sizeof(struct books_list));

  printf("\n                    请输入图书登陆号:");

  fflush(stdin);

  scanf("%s",s->loginnum);

  printf("\n                    请输入图书书名:");

  fflush(stdin);

  scanf("%s",s->bookname);

  printf("\n                    请输入图书作者名:");

  fflush(stdin);

  scanf("%s",s->author);

  printf("\n                    请输入图书出版社:");

  fflush(stdin);

  scanf("%s",s->publisher);

  printf("\n                    请输入图书出版时间:");

  fflush(stdin);

  scanf("%s",s->pbtime);

  printf("\n                    请输入图书分类号:");

  fflush(stdin);

  scanf("%s",s->classfy);

  printf("\n                    请输入图书价格:");

  fflush(stdin);

  scanf("%f",&s->price);

  printf("\n");

  p->next=s;  /*将新增加的节点添加进链表*/

        p=s;  /*p指向尾节点,向后移*/

  s->next=NULL;

  printf("                   ━━━━ 添加成功!━━━━");

  printf("\n                           继续添加?(Y/N):");

  fflush(stdin);

  scanf("%c",&flag);

  printf("\n");

  if(flag=='N'||flag=='n')

 

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

 

 }

 save(head);  /*保存数据至文件*/

 return;

}

/*查询操作*/

void search_book(struct books_list *head)

{

 struct books_list * p;

 char temp[20];

 p=head;

 if(head==NULL || head->next==NULL) /*判断数据库是否为空*/

 {

  printf("                      ━━━━ 图书库为空!━━━━\n");

 }

 else

 {

  printf("请输入您要查找的书名: ");

  fflush(stdin);

  scanf("%s",temp);

  /*指针从头节点开始移动,遍历至尾结点,查找书目信息*/

  while(p->next!= NULL)

  {

   p=p->next;

   if(strcmp(p->bookname,temp)==0)

   {

    printf("\n图书已找到!\n");

    printf("\n");

    printf("登录号: %s\t\n",p->loginnum);

    printf("书名: %s\t\n",p->bookname);

    printf("作者名: %s\t\n",p->author);

    printf("出版单位: %s\t\n",p->publisher);

    printf("出版时间: %s\t\n",p->pbtime);

    printf("分类号: %s\t\n",p->classfy);

    printf("价格: %.2f\t\n",p->price);

   }

   if(p->next==NULL)

   {

    printf("\n查询完毕!\n");

   }

  }

 }

 return;

}

 /*浏览操作*/

     

void Print_Book_Doc(struct books_list * head)

{

 struct books_list * p;

 if(head==NULL || head->next==NULL)  /*判断数据库是否为空*/

 {

  printf("\n                      ━━━━  没有图书记录!  ━━━━\n\n");

  return;

 }

 p=head;

 printf("┏━━━┳━━━━━┳━━━━━┳━━━━━┳━━━━━━┳━━━┳━━━━┓\n");

 printf("┃登录号┃ 书    名 ┃ 作     者┃ 出版单位 ┃  出版时间  ┃分类号┃  价格  ┃\n");

 printf("┣━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━━╋━━━╋━━━━┫\n");

 /*指针从头节点开始移动,遍历至尾结点,依次输出图书信息*/

 while(p->next!= NULL)

 {

  p=p->next;

  printf("┃%-6.6s┃%-10.10s┃%-10.10s┃%-10.10s┃%-12.12s┃%-6.6s┃%.2f   ┃\n",p->loginnum,p->bookname,p->author,p->publisher,p->pbtime,p->classfy,p->price); /*循环输出表格*/

 }

 printf("┗━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━━┻━━━┻━━━━┛\n");

 printf("\n");

}

/*修改操作*/

void info_change(struct books_list * head)

{

 struct books_list * p;

 int panduan=0; /*此变量用于判断是否找到书目*/

 char temp[20];

 p=head;

 printf("请输入要修改的书名:");

 scanf("%s",temp);

 while(p->next!= NULL)

    {

  p=p->next;

  if(strcmp(p->bookname,temp)==0)

  {

   printf("\n                    请输入图书登陆卡号:");

   fflush(stdin);

   scanf("%s",p->loginnum);

   printf("\n                    请输入图书书名:");

   fflush(stdin);

   scanf("%s",p->bookname);

   printf("\n                    请输入图书作者名:");

   fflush(stdin);

   scanf("%s",p->author);

   printf("\n                    请输入图书出版社:");

   fflush(stdin);

   scanf("%s",p->publisher);

   printf("\n                    请输入图书出版时间:");

   fflush(stdin);

   scanf("%s",p->pbtime);

   printf("\n                    请输入图书分类号:");

   fflush(stdin);

   scanf("%s",p->classfy);

   printf("\n                    请输入图书价格:");

   fflush(stdin);

   scanf("%f",&p->price);

   printf("\n");

   panduan=1;

  }

 }

 if(panduan==0)

 {

  printf("\n                      ━━━━  没有图书记录!  ━━━━\n\n");

 }

 return;

}

/*删除操作*/

void DeleteDoc(struct books_list * head)

{

 struct books_list *s,*p;    /*s为中间变量,p为遍历时使用的指针*/

 char temp[20];

 int panduan; /*此变量用于判断是否找到了书目*/

 panduan=0;

 p=s=head;

 printf("                     [请输入您要删除的书名]:");

 scanf("%s",temp);

 /*遍历到尾结点*/

 while(p!= NULL)

    {

  if(strcmp(p->bookname,temp)==0)

  {

   panduan++;

   break;

  }

  p=p->next;

 }

 if(panduan==1)

 {

  for(;s->next!=p;)    /*找到所需删除卡号结点的上一个结点*/

  {

   s=s->next;

  }

  s->next=p->next; /*将后一节点地址赋值给前一节点的指针域*/

  free(p);

  printf("\n                      ━━━━  删除成功!  ━━━━\n");

 }

 else /*未找到相应书目*/

 {

  printf("                     您输入的书目不存在,请确认后输入!\n");

 }

 return;

}

int main(void)

{

 struct books_list * head;

    char choice;

 head=NULL;

 for(;;) /*实现反复输入选择*/

 {

  printf("             ┏━┓━━━━━━━━━━━━━━━━━━━┏━┓\n"); 

  printf("             ┃  ┃          socat   图书管理系统        ┃  ┃\n");

  printf("             ┃  ┗━━━━━━━━━━━━━━━━━━━┛  ┃\n");

  printf("             ┃               ●[1]图书信息录入              ┃\n");

  printf("             ┃                                              ┃\n");

  printf("             ┃               ●[2]图书信息浏览              ┃\n");

  printf("             ┃                                              ┃\n");

  printf("             ┃               ●[3]图书信息查询              ┃\n");

  printf("             ┃                                              ┃\n");

  printf("             ┃               ●[4]图书信息修改              ┃\n");

  printf("             ┃                                              ┃\n");

  printf("             ┃               ●[5]图书信息删除              ┃\n");

  printf("             ┃                                              ┃\n");

  printf("             ┃               ●[6]退出系统                  ┃\n");

  printf("             ┗━━━━━━━━━━━━━━━━━━━━━━━┛\n");

  printf("                               请选择:");

  fflush(stdin);

  scanf("%c",&choice);

  if(choice=='1')

  {

   if(head==NULL)

   {

    head=Create_Books_Doc();

   }

   InsertDoc(head);

  

  }

  else if(choice=='2')

  {

   Print_Book_Doc(head);

  }

  else if(choice=='3')

  {

   search_book(head);

  }

  else if(choice=='4')

  {

   info_change(head);

  }

  else if(choice=='5')

  {

   DeleteDoc(head);

  }

  else if(choice=='6')

  {

   printf("\n");

   printf("           ━━━━━━━━  感谢使用图书管理系统  ━━━━━━━━\n");

   break;

  }

  else

  {

   printf("                      ━━━━ 输入错误,请重新输入!━━━━");

   break;

  }

 }

   return 0;

}

三.运行结果分析。

-

    

1.选择2

2.选择3

3.选择4

4.选择5

5.选择6

四.小结

在这个星期里,我们在专业老师带领下进行了C语言程序实训练习。一周的C语言实训,虽然时间略显仓促,但却让我学到了很多实际运用的技能!

首先,在实训中的第一步是编写一个图书管理系统的程序,虽然我们已经对C语言这门课学习了一学期,对其有一定了解,但运用起来十分困难,通过到网上查资料,调试等,终于编写好此程序。虽然只是一个程序,但所用的知识却都是我们本学期学习的重点知识。在做题的过程中让我们把这些知识复习了一遍,强化了知识!

其次,平时我们学C语言几乎都是为了考试或者做一些比较常规的题目,而这次实训却给我们将所学知识运用于解决实际问题的机会,也让我们感受到了编写软件程序的乐趣。但是不仅仅是如此,更为重要的是在运用所学知识的过程中,记住这些知识,并能够广泛的运用!

再次,通过实训,让我了解到在编写程序中,真的是细节决定成败,因为不管程序的语句是多是少,但是只要有一条语句或语法不正确,就不能使程序得到所需要的结果。没能够使自己编写出来的程序运行出想要的结果,意味着这是一个不理想的程序,对于本次编写来说则是失败的。同时,我也了解到了编程需要很大的耐心,因为平时练习的都是小程序,所以句段比较少,一些错误都很容易被检查出来,但是这次实训却是上百段的语句,难以检查,似乎也没有经验去怎么检查,所以每次我们都需要一点点去调试,然后找到正确的方法、格式。

虽然为了编写这个程序浪费了很多时间,也很累。但是却让我了解了图书的管理系统,不再像以前那样感觉好奇。而且也学会了简单的编程,对以后生活有很大的用处。通过实训,我们有能力自己确定其他的专题进行编程,可以丰富我们的知识以及见识。

通过这次为数几天的C语言实训,让我们了解了更多知识。也巩固了我们的知识理论,熟练的掌握了C语言开发环境,为以后真正编写计算机程序解决实际问题打下基础。同时,在今后遇到其它开发环境时就会触类旁通,很快掌握系统使用。对我们将来到社会工作有很大的帮助。同时他也让我知道,只要努力,任何东西都不会太难。

相关推荐