当前位置:文档之家› 简易书店管理系统

简易书店管理系统

简易书店管理系统
简易书店管理系统

电子信息工程系课程设计报告

课程名称:高级语言程序设计(C)课程设计Array实验项目名称:简易书店管理系统实验时间:6.23~6.27

班级:计教131 姓名:张兆杰学号:7

实验目的:

1. 提高分析问题、解决问题的能力以及实际动手能力。

2. 深入理解C语言中控制语句、数组、函数、指针、结构体等知识的渗透交互应用,提高用C语言解决实际问题的技术和能力。

3. 初步理解数据处理的一般方法,了解数据的读取、处理、保存等技术。

4. 通过具体而微的图书管理系统,初步了解系统开发的一般过程、形式。了解并基本掌握结构化程序设计,加强对一个系统开发的整体把控能力。

实验环境:

Turbo C2.0/win-tc

实验项目及分析:

0. 前言

软件开发流程(Software development process)即软件设计思路和方法的一般过程,包括设计软件的功能和实现的算法和方法、软件的总体结构设计和模块设计、编程和调试、程序联调和测试以及编写、提交程序(请同学们查阅软件开发流程的相关文献)。

作为一个小系统,本实验的开发过程大致包括:功能(需求)分析、系统设计、编程实现和调试、测试、提交程序和相关文档。

1. 功能(需求)分析

书店为了能实现日常的经营,经常涉及到到事物及应该具有的功能是:图书入库(进书采购时)、图书销售、查看图书的库存情况(清单)、图书删除、数据保存、数据备份等功能。

在现实中的商店,商品都具有一个条形码,用来唯一识别商品种类。这是一个重要的数据信息,对于图书来说,就是ISBN号,现实商店中都用条码阅读器来阅读,本实验中条件所限,使用键盘输入书号来模拟条码阅读器。

2. 系统设计

2.0 涉及到的数据结构

图书信息数据类型,采用结构体,包含了书号、书名、作者、单价、库存数量等核心信息:

typedef struct

{char bkno[10]; /*书号*/

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

char author[10]; /*作者*/

float price; /*单价*/

int num; /*库存数量(单位:册)*/

} BOOK;

●最大数组长度,实验中设置为1000;

#define MAXNUM 1000

●图书书库,用BOOK类型的数组bk保存,每个数组单元代表一种图书,退出系统时应该保存在文

件中,为全局数组: BOOK bk[MANUM];

●图书种类数量,为全局变量,退出系统时应该保存在文件中:

int BKNUM =0; /*不同图书的数量,初始值为0*/

2.1 图书进库:

采购时,读取条形码(ISBN号),如果该书已经存在(书号已经在数据库中了),直接显示该图书信息,输入数量后,修改书库中的图书数量;如果书号不在书库,则录入该图书详细信息,并添加信息到书库bk数组。

相关函数原型:void bookin()

2.2 图书销售:

如果顾客将购买某本书,营业员读取条形码(ISBN号),系统会告知该书是否在库存清单中,如果不在,显示适当的提示信息;如果在,系统显示该书的详细信息并询问所需的册数。如果库存书的册数不足,显示相应的销售失败的提示信息;册数足够则显示这些书的总价格,此时销售成功,在书库中的册数减去销售的册数。

相关函数原型:void booksail ()

2.3 图书列表:

显示库存中现有的图书,每20行暂停。

相关函数原型:void booklist()

2.4 打开和保存数据文件:

所有图书相关信息都可以保存在磁盘文件(saledata.txt)上,程序开始后,先从数据文件读取数据(到数组),以数组为中心进行图书进、销等操作;所有操作结束后,退出程序时必须把数组数据保存回磁盘

2

文件,并把原数据文件作为备份文件saledata.bak。

相关函数原型:void rdata(),从文件读取数据到bk数组。

void wdata() 保存bk数组的数据到文件,同时备份旧文件。

2.5 友好的界面:

要求有友好的操作界面,以上功能都能在界面中以适当的形式体现并方便地操作。

相关函数原型: int showsel():清屏并显示功能选项。

2.6 文件结构:

前两字节存放记录个数(即不同书的数量BKNUM),这两个字节之后的内容是每个不同的书具体信息记录(即用来存放bk数组的所有有效数据)

2.7 可以自由发挥,实现其他相关功能,比如图书查询等。(该部分请根据自己的设计进行完善)

实验过程和结果:(程序运行过程截图,打印后,配上说明文字。)

系统主界面。图书列表。

图书进库,可以增加已有的书本的数量,也可以新增书本。这是图书入库后的新列表。

第 3 页共11 页

4

这是零售清单,可以购买并结算已有的图书。

当输入不存在的图书时,系统会提示先入库,然后再进行销售。

这是按书名模糊搜索。

这是按作者模糊搜索。

这是删除图书前的列表。

这是删除图书后的列表,此时已删除完012这本书。

实 验 心 得:(总结在实验中的设计、编程实现、编译、运行、测试等各环节中所出现的问题及解决方法。)

通过这周的课程设计,我认识到C 语言是一门比较难的课程。需要多花时间上机练习。这次的程序训练培养了我实际分析问题、编程和动手能力,使我掌握了程序设计的基本技能,提高了我适应实践编程的能

力。

当我第一次听到老师说要写个两百多行的程序时,对于我这C语言基础一般的人来说,就觉得好难,刚开始我一点头绪也没有,于是就上网查找资料,可是网络上有些代码又不易理解,这下我就很苦恼了,可是没办法啊,程序还是要写的。还好在上机的时候,老师的讲解很通俗易懂,慢慢的我就有了点信心。老师给了我们大体的框架,我就一点点的进行功能的完善。

图书列表完成的挺顺利,可是在图书入库时,却老是出错,还好老师进行了细心的讲解,最后顺利的完成了。图书销售因为与图书入库挺像的,只要做些修改,就可以完成了,也还算顺利。在图书查询这个功能中,因为要做到模糊搜索,难度还是有点大的,于是我就不断的上网查资料,一点点的理解别人的程序,经过不断的修改、调试,总算是完成了这个功能。在删除图书这个功能中,我又遇到了困难,我向同学进行了请教,虽然在使用时还不是那么的人性化,但也算完成了。

通过这周的课程设计,我明白了要完成一个优秀的程序,必须要熟练掌握各种语句的特点及用法,要学会举一反三,充分实现C程序的灵活性。在平时的学习实践中,要不断开动脑筋,活学活用。要发扬团体合作的精神,互帮互助,共同进步。善于发问,善于思考。

代码如下:

#include "stdio.h"

#include "conio.h"

#include "stdlib.h"

#include

#define ISBN 3

#include

int i,bknum;FILE *fp;

int Mark=0;

typedef struct

{char isbn[10]; /*书号*/

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

char author[10]; /*作者*/

float price; /*单价*/

int num; /*数量(单位:册)*/

} BOOK;

BOOK bk[1000];

rdata()

{

FILE *fp;

if ((fp=fopen("bookdata.txt","rb"))==NULL)

{printf("Can not open the file!\n");return;}

fread(&bknum,sizeof(int),1,fp);

fread(bk,sizeof(BOOK),bknum,fp);

fclose(fp);

}

wdata()

{

FILE *fp;

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

{printf("Can not open the file!\n");return;}

第 5 页共11 页

fwrite(&bknum , sizeof(int) , 1 ,fp);

fwrite(bk,sizeof(BOOK),bknum,fp);

fclose(fp);

}

void pb(int i,int j){ /*输出bk[i],j==0时不输出“书号书名等.....”;i==-1时不输出数据*/ if(j!=0) {

printf("%-14s%-22s%-14s%-9s%-5s\n","书号","书名","作者","单价","数量");

printf("-------------------------------------------------------------------\n");}

if(i!=-1 )

printf("%-14s%-22s%-14s%-9.2f%-5d\n",bk[i].isbn,bk[i].bkname

,bk[i].author,bk[i].price,bk[i].num);

}

booklist(){/*#################输出图书列表#######################*/

char text[10];

int i,j,k,t20=1,tip=0;

system("CLS");

printf("\n 输入【del 书号】并回车可执行删除操作如:del 001\n ");

printf("\n 输入f可刷新列表哦!\t 输入000返回\n");

printf("\n-------------------------------------------------------------------\n");

pb(-1,1);

if(bknum)

for(i=0;i

pb(i,0);

if(t20==20) {printf("\n\n");system("PAUSE");}}

printf("\n");

if(!bknum) printf("列表为空!\n\n");

while(1){

scanf("%s",text);

if(strcmp(text,"del")==0) { /*删除指令*/

tip=0;

scanf("%s",text);

for(j=0;j

if(strcmp(text,bk[j].isbn)==0){

{for(k=j;k

bk[k]=bk[k+1];}

bknum--;

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

6

tip=1;

}

if(tip==0) printf("\n未找到删除项!\n\n");

}

if(strcmp(text,"000")==0) return;

if(strcmp(text,"f")==0){ booklist();return;}

fflush(stdin);

Mark=0;

}

}

bklist()

{int i;

system("cls");

printf("%-10s%-20s%-10s%-6s%5s\n","书号","书名","作者","单价","数量"); printf("----------------------------------------------------------------\n");

for(i=0;i

printf("%-10s%-20s%-10s%-6.2f%5d\n",

bk[i].isbn,bk[i].bkname,bk[i].author,bk[i].price,bk[i].num);

getch();

}

bkin()

{

int i,n1;

char b[10];

system("cls");

printf("\n\n\n");

printf("---------------------- 图书进库--------------------------\n");

printf("----------------------------------------------------------------\n");

printf("\n\n\n");

printf("请输入书号:");

scanf("%s",b);

while(strcmp(b,"000"))

{

for(i=0;i

if(strcmp(bk[i].isbn,b)==0) break;

if(i

{

printf("该书已存在,请输入书的数量\n"); scanf("%d",&n1);

bk[i].num+=n1;

}

第7 页共11 页

else

{

strcpy(bk[i].isbn,b);;

printf("请输入书名:"); scanf("%s",bk[i].bkname);

printf("请输入作者:"); scanf("%s",bk[i].author);

printf("请输入价格:"); scanf("%f",&bk[i].price);

printf("请输入数量:"); scanf("%d",&bk[i].num);

bknum++;

}

printf("请输入书号:");

scanf("%s",b);

}

wdata();

}

bksell()

{

int i,count=0;char b[10];BOOK s[100];

float sum=0,in,out;

system("cls");

printf("---------------------图书销售-------------------\n\n\n");

printf("请输入书号:");

scanf("%s",b);

while(strcmp(b,"000"))

{

for(i=0;i

if(strcmp(bk[i].isbn,b)==0) break;

if(i

{

if(bk[i].num>0)

{s[count++]=bk[i];bk[i].num--;

sum+=bk[i].price;

}

else{printf("sorry,该书库存不足,按任意键返回...");getch();}

}

else

{

printf("该书未入库,请先入库后再进行销售...");getch();}

system("cls");

8

printf("--------------------------------------------------------------------------\n");

printf(" 零售清单\t输入000可进行结算哦!\n");

printf("--------------------------------------------------------------------------\n");

printf("%-10s%-20s%-10s%-6s%5s\n","书号","书名","作者","单价","数量");

printf("--------------------------------------------------------------------------\n");

for(i=0;i

printf("%-10s%-20s%-10s%-6.2f%5d\n",

s[i].isbn,s[i].bkname,s[i].author,s[i].price,s[i].num);

wdata();

printf("请输入书号:");

scanf("%s",b);

}

printf("--------------------------------------------------------------------------\n");

printf("总价:%.2f\n",sum);

printf("您购买的书本数量为:%d",count);

printf("\n请输入收入金额:");

scanf("\n%f",&in);

out=in-sum;

printf("找零:%6.2f",out);

getch();

}

bkfind(){

int select=-1,tip=0,k,i,l,t=0,j=0/*j 判断字符*/;char d,in[20],bj[20];

while(1){

fflush(stdin);

tip=0;

system("CLS");

printf("\n\n请按需求进行查询:"

"\n\n\t\t\t\t1. 搜书名\n\n\t\t\t\t2. 搜作者\n\n\t\t\t\t0. 退出\n") ;

switch(getch()){

case '0':return;break;

case '1':select=1;break;

case '2':select=2;break;

}

if(select==1){printf("\n请输入书名:");

tip=0;

gets(in);fflush(stdin);

if(strlen(in)==0) continue;

第9 页共11 页

for(i=0,t=0;i

if(strcmp(in,bk[i].bkname)==0) {pb(i,1);t=1;tip=1;}}

if(t!=1){

for(i=0,j=0;i

if(strcmp(in,bk[i].bkname)==0) {pb(i,1);t=1;tip=1;}

else if(t!=1){

for(k=0;k

for(l=0;l<(strlen(bk[i].bkname));l++)

if(in[k]==bk[i].bkname[l]||in[k]==bk[i].bkname[l]+32) j++;

if(j>=strlen(in)) {printf("\n"); pb(i,1);tip=1;}

j=0;}} }

if(bknum==0||tip==0) {

printf("\n找不到对应的书!"); }

}

if(select==2){printf("\n请输入作者名:");

tip=0;

gets(in);fflush(stdin);

if(strlen(in)==0) continue;

for(i=0,t=0;i

if(strcmp(in,bk[i].author)==0) {pb(i,1);t=1;tip=1;}}

if(t!=1){

for(i=0,j=0;i

for(k=0;k

for(l=0;l<(strlen(bk[i].author));l++)

if(in[k]==bk[i].author[l]||in[k]==bk[i].author[l]+32) j++;

if(j>=strlen(in)){printf("\n"); pb(i,1);tip=1;}

j=0;

}}

if(bknum==0||tip==0) {

printf("\n找不到对应的书!"); }

}

getch();

}

}

int showsell()

{

int sell;

system("cls");

printf(" \n\n\n" );

printf(" 简易书店管理系统\n");

printf("----------------------------------------------------------------\n");

printf(" 0:退出\n\n");

printf(" 1:图书列表\n");

10

printf(" 2:图书录入\n");

printf(" 3:图书销售\n");

printf(" 4:图书查询\n");

printf(" 5:图书删除\n");

printf("----------------------------------------------------------------\n"); printf(" 亲,请输入您想查询的(*^__^*) :"); scanf("%d",&sell);

return sell;

}

main()

{

int sell=-1;int k;

rdata();

while(sell!=0)

{

switch(sell)

{

case 0:break;

case 1:bklist();break;

case 2:bkin(); break;

case 3:bksell();break;

case 4:bkfind();break;

case 5:booklist();break;

}

sell=showsell();

}

}

第11 页共11 页

相关主题
文本预览
相关文档 最新文档