小说管理系统

发布时间:2020-04-14 01:49:49

课 程 设 计

报 告

题目:小说管理系统

题目:小说管理系统

一、 课程设计目的

掌握C语言的课程设计结构,语法规则,编程方法,达到独立编程能力,为以后的学习,设计大型应用系统打下坚实的基础。

二、课程设计内容

通过结构体、数组、文件等的应用,设计了一个小型的小说管理系统。

三、需求分析

该小说管理系统,具有最基本的功能:

1:通过输入和存储小说编号、小说名称、小说种类、小说总评、完结日期;

2:将输入信息输出;

3:通过输入小说名称或小说编号查询出所要的信息;

4:添加小说信息;

5;输入想要修改的小说的名称种类、总评,可以将任一小说信息修改;

6:通过输入要删除小说编号或名称,可删除此小说的全部信息;

7:可按照小说编号或完结日期对小说信息进行排序;

四、概要设计

1)、系统结构图

对系统进行分析,给出结构图

word/media/image1.gif

word/media/image2.gifword/media/image3.gifword/media/image4.gifword/media/image5.gifword/media/image6.gif

word/media/image7.gifword/media/image8.gifword/media/image9.gifword/media/image10.gif

2)模块功能简介:

1、 输入模块:输入要存储的信息,最多只能存入15个信息。

2、 输出模块:输出已经输入的信息。

3、 添加模块:添加一些信息到存储系统。

4、 修改模块:将已存储的名称、种类、总评这些信息进行修改。

5、查询模块:

(1)按名称查询函数:通过输入小说名称,若该名称在存储信息中,则将输出关于该小说的所有信息,若不存在,则输出没有关于此小说的信息;

(2)按编号查询函数:输入编号在存储信息中,则输出关于该编号小说的所有信息,若无,则输出没有关于此编号的信息;

(3)返回主菜单:返回系统主菜单。

6、删除模块:

(1)按编号删除:通过输入编号将该小说信息全部删除,若无该小说信息,则告知无关于此编号的小说信息;

(2)名称删除:通过输入名称将小说信息全部删除,若无该小说信息,则告知无关于此名称的小说信息;

(3)返回主菜单:返回系统主菜单。

.详细设计及运行结果

主函数:

word/media/image11.gif

word/media/image12.gif

1 2 3 0

word/media/image13.gif

word/media/image12.gifword/media/image14.gifword/media/image15.gifword/media/image12.gif

word/media/image16.gif

.调试情况,设计技巧体会

这次C语言的实习,自己最大的感受是无知.知识总是在用的时候才知道匮乏,以前觉得自己C语言考试过了,就是合格了,对自己要求太低,以至于这次实习遇到很大的麻烦.

这个程序是我按照书上例题程序模仿编写的,当程序写完后,运行时发现有许多错误,我请教老师和同学,对程序进行了耐心细致的修改,经过一番努力,程序里的错误终于被全部纠正了。但程序没有错误不代表它能正常运行,

基础知识不够扎实是我最大的问题,对很多知识点是只知其一,不知其二,或是只知其然而不知其所以然,C语言程序的编写和运行是非常具有科学性的,没有正确掌握C语言编写的风格和规则,要编译成功较为复杂的程序真的是困难重重.正所谓无以规矩,不成方圆,对待科学文化知识没有一个严谨求实的态度,只能让自己在在成功路上举步为艰.

但一份耕耘一份收获,两个星期的C语言实习,我又重新拾起了渐以模糊的C语言知识和概念,通过上机调试程序,不但熟悉了C语言的一些基本知识,而且熟练了上机实践,通过实践,又掌握了一些在书本上学不到的解决实际问题的方法,此外,也将学过的计算机基础知识做了一次复习,这次实习确实是一次非常珍贵的实习.我明确了以后的方向和目标,再也不会荒废时间了.

.参考文献

C语言程序设计(第二版) 王曙燕/主编

八.附录

源代码

#include "stdio.h"

#include "string.h"

#include "stdlib.h"

#include "conio.h"

#define MAX 15

int sum; /*记录小说个数*/

/*日期结构体类型*/

struct date

{

int year;

int month;

int day;

};

/*小说信息结构体类型*/

struct novel_type

{

int num;

char name[20];

char kind[20];

float score;

struct date time;

}novel[MAX];/*存放MAX部小说信息记录的结构体数组*/

/*函数声明*/

int input_message();

void output_message();

int add_message();

int delet_by_name();

int delet_by_num();

int renew_message();

int inquire_name();

int inquire_num();

int inquire_message();

int sort_num();

int sort_time();

int sort_message();

int read_message();

/*保存信息*/

save_message(int sum)

{

FILE *fp;/*定义文件指针*/

int i;

if((fp=fopen("book.txt","wb"))==NULL)

{

printf("读文件错误!\n");

return 0;

}

for(i=0;i

if(fwrite(&novel[i],sizeof(struct novel_type),1,fp)!=1)

printf("写文件错误!\n");

fclose(fp);

return 0;

}

/*主函数*/

main()

{

int choice;

sum=read_message();

do

{

printf("\n\n\n ***********小说信息管理系统***********\n\n");

printf(" 1.录入小说信息\n\n");

printf(" 2.浏览小说信息\n\n");

printf(" 3.更新小说信息\n\n");

printf(" 4.小说信息排序\n\n");

printf(" 5.查询小说信息\n\n");

printf(" 0.退出系统\n\n");

printf(" 请选择(0--5): \n\n\n");

printf(" ---------------------");

scanf("%d",&choice);

switch(choice)

{

case 1: input_message();break;

case 2: output_message();break;

case 3: renew_message();break;

case 4: sort_message();break;

case 5: inquire_message();break;

case 0: break;

}

}while(choice!=0);

save_message(sum);

printf("\n --以上小说信息已保存!-- (文件名:book.txt) \n");

return 0;

}

/*输入模块*/

input_message()

{

int i=0,s=MAX;

printf("\n\n 录入小说信息 (最多%d)\n",s);

printf("\n");

do

{

printf("\n %d部小说",i+1);

printf("\n\n 编号:");

scanf("%d",&novel[i].num);

if(novel[i].num==0) break;

printf("\n 名称:");

scanf("%s",novel[i].name);

printf("\n 种类:");

scanf("%s",novel[i].kind);

printf("\n 总评:");

scanf("%f",&novel[i].score);

printf("\n 完结日期(yyyy-mm-dd):");

scanf("%d-%d-%d",&novel[i].time.year,&novel[i].time.month,&novel[i].time.day);

i++;

}while(i

printf("\n --%d部小说信息输入完毕!--\n",i);

sum=i;

printf("\n 按任意键返回主菜单!");

return 0;

}

/*读取信息*/

int read_message()

{

FILE *fp;

int i=0;

if((fp=fopen("book.txt","rb"))==NULL)/*打开文件*/

{

printf("\n\n*****暂时还没有任何库存信息,按任意键进入主菜单选择基本信息的录入!****\n");

return 0;

}

while(!feof(fp))

{

fread(&novel[i],sizeof(struct novel_type),1,fp);

if(novel[i].num==0) break;

else i++;

}

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

return(i);

}

/*小说信息浏览*/

void output_message()

{

int i;

printf("\n\n ****小说信息表**** \n\n");

printf("\n");

printf(" 编号-------名称-------种类-------总评-------完结日期 \n\n");

for(i=0;i

printf(" %5d %12s %8s %10f %7d-%2d-%2d\n",novel[i].num,novel[i].name,novel[i].kind,novel[i].score,novel[i].time.year,novel[i].time.month,novel[i].time.day);

}

/*添加小说信息*/

add_message()

{

int i=sum,flag=0;

char choice,ch;

printf("\n\n 添加一本小说的信息\n");

printf("\n");

do

{

novel[i].num=++sum;

printf("\n 编号:");

scanf("%d",&novel[i].num);

printf("\n 名称:");

scanf("%s",novel[i].name);

printf("\n 种类:");

scanf("%s",novel[i].kind);

printf("\n 总评:");

scanf("%f",&novel[i].score);

printf("\n 完结日期(yyyy-mm-dd):");

scanf("%d-%d-%d",&novel[i].time.year,&novel[i].time.month,&novel[i].time.day);

printf("\n\n\n 要继续吗? (Y/N) ");

ch=getchar();

choice=getchar();

i++;

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

{

printf("\n 继续! \n");

flag=1;

}

else flag=0;

}while(flag==1);

printf("\n 按任意键返回主菜单!");

return 0;

}

/*按小说名称删除*/

int delet_by_name()

{

int i=0,k,flag;char ch,delet_name[20];

char choice;

do

{

printf("\n 输入要删除的小说名称:");

scanf("%s",delet_name);

for(i=0;i

{

if(strcmp(novel[i].name,delet_name)==0)

{

k=i;

for(k=i;k

novel[k]=novel[k+1];

sum=MAX-1;

}

if(i==MAX)

{

printf("\n 无该小说信息!");

return 0;

}

}

printf("\n\n 要继续删除吗?(Y/N)");

ch=getchar();

choice=getchar();

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

{

flag=1;

printf("\n 继续!\n");

}

else flag=0;

}while(flag==1);

printf("\n 删除完毕!");

return 0;

}

/*按小说编号删除*/

int delet_by_num()

{

int i,j,delet_num,flag,b=0;

char ch;

char choice;

do

{

printf(" 输出要删除的小说编号:");

scanf("%d",&delet_num);

for(i=0;i

{

if(novel[i].num==delet_num&&novel[i].num!=0)

{

for(j=i;j

{novel[j]=novel[j+1];}

sum--;

break;

}

else b++;

}

printf("\n");

printf(" 编号-------名称-------种类-------总评-------完结日期 \n\n");

for(i=0;i

{

printf(" %5d %12s %8s %10f %7d-%2d-%2d\n",novel[i].num,novel[i].name,novel[i].kind,novel[i].score,novel[i].time.year,novel[i].time.month,novel[i].time.day);

printf("\n");

}

if(sum==b)

{

printf("\n 无该小说信息!");

return 0;

}

printf("\n\n 要继续删除吗?(Y/N)");

ch=getchar();

choice=getchar();

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

{

flag=1;

printf("\n 继续! \n");

}

else flag=0;

}while(flag==1);

printf("\n 删除完毕! ");

return 0;

}

/*删除模块*/

int delet_message()

{ int choice;

do

{ printf("\n\n --------- 删除小说信息 ---------\n\n\n");

printf(" 1.按小说名称删除\n\n");

printf(" 2.按小说编号删除\n\n");

printf(" 0.返回主菜单\n\n");

printf(" 请选择(0-2)\n\n;");

scanf("%d",&choice);

switch(choice)

{ case 1: delet_by_name();break;

case 2: delet_by_num();break;

case 0: break;

}

}while(choice!=0);

save_message(sum);

return 0;

}

/*修改模块*/

revise_message()

{ int i=0,choice,revise_num,flag;

do

{ printf("\n 请输入要修改的小说编号:");

scanf("%d",&revise_num);

for(i=0;i

if(novel[i].num==revise_num)

{ printf("\n ---小说信息---\n");

printf("\n");

printf(" 编号-------名称-------种类-------总评-------完结日期 \n\n");

printf(" %5d %12s %8s %10f %7d-%2d-%2d\n",novel[i].num,novel[i].name,novel[i].kind,novel[i].score,novel[i].time.year,novel[i].time.month,novel[i].time.day);

printf("\n 您要修改哪一项?\n");

printf("\n 1.名称\n");

printf("\n 2.种类\n");

printf("\n 3.总评\n");

printf("\n 请选择(1-3):");

scanf("%d",&choice);

switch(choice)

{case 1:printf("\n 输入修改后的名称:");

scanf("%s",novel[i].name); break;

case 2:printf("\n 输入修改后的种类:");

scanf("%s",novel[i].kind); break;

case 3:printf("\n 输入修改后的总评:");

scanf("%f",&novel[i].score); break;

}

printf("\n");

printf(" 编号-------名称-------种类-------总评-------完结日期 \n\n");

printf(" %5d %12s %8s %10f %7d-%2d-%2d\n",novel[i].num,novel[i].name,novel[i].kind,novel[i].score,novel[i].time.year,novel[i].time.month,novel[i].time.day);

break;

}

if(i==sum)

{ printf("\n 该小说不存在!");

return 0;

}

printf("\n\n 继续修改吗? (Y/N) ");

choice=getchar();

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

{flag=1;

printf("\n 继续!\n");

}

else flag=0;

}while(flag==1);

printf("\n 按任意键返回主菜单!");

return 0;

}

/*更新模块*/

renew_message()

{ int choice;

do

{ printf("\n\n\n **********更新小说信息**********\n\n");

printf(" 1.添加小说信息\n\n");

printf(" 2.删除小说信息\n\n");

printf(" 3.修改小说信息\n\n");

printf(" 0.返回主菜单\n\n");

printf(" 请选择(0-3):");

scanf("%d",&choice);

switch(choice)

{case 1:add_message();break;

case 2:delet_message();break;

case 3:revise_message();break;

case 0:break;

}

}while(choice!=0);

return 0;

}

/*按名称查询*/

inquire_name()

{

int i;

char inquire_name[10];

printf("\n 输入要查询的小说名称:");

scanf("%s",inquire_name);

for(i=0;i

if(strcmp(novel[i].name,inquire_name)==0&&novel[i].num!=0)

{ printf("\n ---%s小说信息--- \n",novel[i].name);

printf("\n");

printf(" 编号-------名称-------种类-------总评-------完结日期 \n\n");

printf(" %5d %12s %8s %10f %7d-%2d-%2d\n",novel[i].num,novel[i].name,novel[i].kind,novel[i].score,novel[i].time.year,novel[i].time.month,novel[i].time.day);

}

if(i==sum)

printf("\n 该小说信息不存在!");

return 0;

}

inquire_num() /*按编号查询*/

{

int i,j=0;

int inquire_num;

printf("\n 请输入要查询的小说编号:");

scanf("%d",&inquire_num);

for(i=0;i

if(novel[i].num==inquire_num&&novel[i].num!=0)

{

printf("\n ---%d号小说信息--- \n",novel[i].num);

printf("\n");

printf(" 编号-------名称-------种类-------总评-------完结日期 \n\n");

printf(" %5d %12s %8s %10f %7d-%2d-%2d\n",novel[i].num,novel[i].name,novel[i].kind,novel[i].score,novel[i].time.year,novel[i].time.month,novel[i].time.day);

}

else j++;

if(j==sum)

printf("\n\n 该小说信息不存在!");

return 0;

}

/*查询模块*/

inquire_message()

{ int choice;

do

{ printf("\n\n\n **********查询小说信息**********\n\n");

printf(" 1.按小说名称查询\n\n");

printf(" 2.按小说编号查询\n\n");

printf(" 0.返回主菜单\n\n");

printf(" 请选择(0-2):");

scanf("%d",&choice);

switch(choice)

{case 1:inquire_name();break;

case 2:inquire_num();break;

case 0:break;

}

}while(choice!=0);

return 0;

}

/*按编号排序*/

sort_num()

{ int i,j;

struct novel_type t;

for(i=0;i

for(j=i+1;j

if(novel[i].num>novel[j].num)

{t=novel[i];

novel[i]=novel[j];

novel[j]=t;

}

printf("\n\n\n按编号排序后的的顺序:\n\n");

printf("\n");

printf(" 编号-------名称-------种类-------总评-------完结日期 \n\n");

for(i=0;i

printf(" %5d %12s %8s %10f %7d-%2d-%2d\n",novel[i].num,novel[i].name,novel[i].kind,novel[i].score,novel[i].time.year,novel[i].time.month,novel[i].time.day);

return 0;

}

/*按完结日期排序*/

sort_time()

{ int i,j;

struct novel_type t;

for(i=0;i

for(j=i+1;j

if(novel[i].time.year>novel[j].time.year)

{ t=novel[i];

novel[i]=novel[j];

novel[j]=t;

}

else if(novel[i].time.year==novel[j].time.year)

if(novel[i].time.month>novel[j].time.month)

{ t=novel[i];

novel[i]=novel[j];

novel[j]=t;

}

else if(novel[i].time.month==novel[j].time.month)

if(novel[i].time.day>novel[j].

time.day)

{ t=novel[i];

novel[i]=novel[j];

novel[j]=t;

}

printf("\n\n\n按完结日期排序后的顺序:\n\n");

printf("\n");

printf(" 编号-------名称-------种类-------总评-------完结日期 \n\n");

for(i=0;i

printf(" %5d %12s %8s %10f %7d-%2d-%2d\n",novel[i].num,novel[i].name,novel[i].kind,novel[i].score,novel[i].time.year,novel[i].time.month,novel[i].time.day);

return 0;

}

/*排序模块*/

sort_message()

{ int choice;

do

{ printf("\n\n\n **********小说排行信息**********\n\n");

printf(" 1.按编号排序\n\n");

printf(" 2.按完结日期排序\n\n");

printf(" 0.返回主菜单\n\n");

printf(" 请选择(0-2):");

scanf("%d",&choice);

switch(choice)

{case 1: sort_num(); break;

case 2: sort_time(); break;

case 0: break;

}

}while(choice!=0);

return 0;

}

小说管理系统

相关推荐