资源描述
沈 阳 航 空 航 天 大 学
课程设计
学 号 ___
班 级 ___94070202_____
姓 名 ___ 于 涛__ __
指导老师 __ 徐 晗______
10 月 08 日
目录
一、需求分析 1
二、设计分析 2
三、关键界面截图 7
四、技术关键点 8
五、个人总结 10
六、参考文件 11
七、源程序 11
一、需求分析
经过对程序设计题目标分析可知,整个程序设计实现大致分为五个模块,其中每一个模块对应一个函数,她们功效分别是:录入新教材信息,添加已经有教材,查找教材信息,保留教材函数。在这些函数当中,前三个函数实现严格根据题目标要求,而最终一个函数用来将修改函数保留在book.txt中。
1. 稳定性分析
指系统比较健壮,只要是用户合理操作,系统全部应给出合理正确回应,而不是出现令用户感到意外系统错误或系统瓦解。
2. 关键功效分析
(1)录入教材信息:许可用户输入教材名称、作者、出版社、教材册数、编号、售价。
(2)查询教材: 许可根据编号和书名对教材各项信息进行查询;
(3)添加已经有教材: 经过添加已经有教材同时对教材信息更改;
(4)保留教材函数 将实施插入教材信息存入book.txt中。
除上面介绍功效之外,程序还含有退出功效,能够在输入修改信息以后实现选择退出。
每一本教材统计全部包含编号、作者、出版社、售价、书名和数量,在程序当中,将教材统计类型定义为结构体类型,添加和追加教材信息直接写入book.txt文件中,其它函数每次对教材统计访问,其数据起源全部是book.txt文件,这么做不仅能够确保教材数据一致性,而且能够对教材数据进行保留,确保每次运行程序全部能够采取原来数据。
二、设计分析
关键有5个功效模块,每个模块对应一个C语言自定义函数。这些函数原型及其功效简述以下:
1、 教材录入函数说明
这个函数用static申明局部变量,使函数调用结束后不消失而保留原值。用只写方法打开一个文件夹(book.txt)把数据项写入指定文件(book.txt)中。关闭文件。
2、教材查询函数
该函数关键内容是switch函数使用、for函数嵌套使用和strcmp比较字符串函数使用。
3、已经有教材添加函数
该函数关键内容是if函数嵌套和for函数使用和strcmp比较字符串函数使用
4、教材信息保留函数
这个函数先建立一个文件并把具体信息存入文件中
1、程序总体结构图
程序结构总图
设置界面函数
新教材信息录入
教材信息保留
教材信息查询
教材信息更改
2、具体功效框图
(1)录入新教材信息函数
(2)查询教材信息
(3)添加已经有教材信息
(4)保留教材信息函数
三、关键界面截图
图1 程序主界面
图2 录入界面
图3 查询界面
四、技术关键点
(对本程序贡献较大C语言知识点;关键算法设计和实现)
1、结构体应用
定义了结构体用来描述教材名称、作者、出版社、编号、册数和售价,具体定义以下:
#define B 1000
typedef struct Book
{ char num[20];
char name[20];
char author[20];
char press[20];
int count;
float shoujia;
}book[B];
struct Book books[B];
所定义结构体关键用于定义数组。
2、文件操作
包含了文件写入、读取和保留三个方面。比如以下程序段用于保留教材信息:
void save()
{
int i = 0;
FILE *fp;
fp = fopen("e:\\book.txt", "wr");
while(books[i].count > 0)
{
fprintf(fp, "教材名称:%s 教材作者:%s 出版社:%s 册数:%d 编号:%s 售价:%f\n", books[i].name, books[i].author,books[i].press,books[i].count,books[i].num,books[i].shoujia);
i++;
}
fclose(fp);
}
3、相关查询函数
实现从系统中查询某教材相关信息查询函数稍微复杂部分,需要优异行选择是经过名称查询还是编号查询。以下是经过教材名称查询函数:
void chaxun() /*教材查询*/
{ FILE *fp;
int i,flag=0;
int a;
char x[32];
char y[32];
if((fp=fopen("e:\\book.txt","r"))==NULL)
{
printf("此文件无法打开!\n");
return;
}
printf("请选择查询方法:1.教材名 2.编号\n");
scanf("%d",&a);
switch(a)
{
case 1: printf("输入教材名:\n");scanf("%s",x);
for(i=0;i<1000;i++)
if (strcmp(books[i].name,x)==0) /*比较输入名和存放名字符串大小*/
{printf("教材名:%s 教材作者:%s 出版社:%s 册数:%d 编号:%s 售价:%f\n",books[i].name,books[i].author,books[i].press,books[i].count,books[i].num,books[i].shoujia);
flag=1;
}
if(flag==0)
printf("此教材不存在\n");
break;
五、个人总结
C语言是一门现有趣又很有用课程,说难也不难,不过也不简单,只要会很好应用,便会认为编程过程也并不感觉枯燥,当程序编完且运行成功以后,便认为很有成就感,即使有时也会被一时处理不了问题弄焦头烂额,但在处理过程中逐步、更深掌握这门课程知识,所以,这一周C语言课程设计实习收获是很大,甚至还有一点认为实习时间有点短。经过这次c语言课程设计,我对C语言知识进行了比较全方面学习,了解到C语言简单编程实际应用。
我程序基础功效符合题目要求,但也并不是太完美。比如在输入教材册数时候假如输入不是数字话,不会有提醒。我一直没有想四处理措施……
经过此次课程设计,我熟悉了函数调用,指针应用,数组利用。程序能够实现题目所要求各项,知道了实践并真正上机操作意义。
六、参考文件
1 谭浩强.C程序设计.北京:清华大学出版社,
七、源程序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define B 1000
typedef struct Book /*定义教材结构体*/
{ char num[20];
char name[20];
char author[20];
char press[20];
int count;
float shoujia;
}book[B];
struct Book books[B];
void luru() /*录入教材信息*/
{
static int i = 0;
printf("\n请输入教材名称:");
scanf("%s", books[i].name);
printf("请输入作者:");
scanf("%s", books[i].author);
printf("请输入出版社:");
scanf("%s", books[i].press);
printf("请输入教材册数:");
scanf("%d", &books[i].count);
printf("请输入编号:");
scanf("%s", books[i].num);
printf("请输入售价:");
scanf("%f", &books[i].shoujia);
printf("教材录入结束.\n");
i++;
}
void tianjia() /*教材添加*/
{
int i,count;
char name[10];
printf("\n请输入教材名称:");
scanf("%s",name);
for(i=0;i<1000;i++)
{ if(strcmp(books[i].name,name)==0)
{ printf("\n输入添加册数:");
scanf("%d", &count);
books[i].count += count;
printf("\n教材已添加\n");
break;
}
else
{
printf("\n无此教材\n");
break;
}
}
}
void save()
{
int i = 0;
FILE *fp;
fp = fopen("e:\\book.txt", "wr");
while(books[i].count > 0)
{
fprintf(fp, "教材名称:%s 教材作者:%s 出版社:%s 册数:%d 编号:%s 售价:%f\n", books[i].name, books[i].author,books[i].press,books[i].count,books[i].num,books[i].shoujia);
i++;
}
fclose(fp);
}
void chaxun() /*教材查询*/
{ FILE *fp;
int i,flag=0;
int a;
char x[32];
char y[32];
if((fp=fopen("e:\\book.txt","r"))==NULL)
{
printf("此文件无法打开!\n");
return;
}
printf("请选择查询方法:1.教材名 2.编号\n");
scanf("%d",&a);
switch(a)
{
case 1: printf("输入教材名:\n");scanf("%s",x);
for(i=0;i<1000;i++)
if (strcmp(books[i].name,x)==0) /*比较输入名和存放名字符串大小*/
{printf("教材名:%s 教材作者:%s 出版社:%s 册数:%d 编号:%s 售价:%f\n",books[i].name,books[i].author,books[i].press,books[i].count,books[i].num,books[i].shoujia);
flag=1;
}
if(flag==0)
printf("此教材不存在\n");
break;
case 2: printf("输入编号:\n");scanf("%s",y);
for(i=0;i<1000;i++)
if (strcmp(books[i].num,y)==0)
{printf("教材名称:%s 教材作者:%s 出版社:%s 册数:%d 编号:%s 售价:%f\n",books[i].name,books[i].author,books[i].press,books[i].count,books[i].num,books[i].shoujia);
flag=1;
}
if(flag==0)
printf("此教材不存在\n");
break;
default:
break;
}
fclose(fp);
}
void show() /*显示操作界面*/
{printf("\n ******************沈阳航空航天大学教材管理系统********************* ");
printf("\n * 1 录入教材信息 *");
printf("\n * 2 查询教材信息 *");
printf("\n * 3 更改教材信息 *");
printf("\n * 4 保留教材信息 *");
printf("\n * 5 退出系统 *\n");
printf("\n 请输入您要选择操作序号,按回车键确定:");
}
void main()
{int n;
show();
scanf("%d",&n);
while (1)
{switch(n)
{ case 1: luru(); break;
case 2: chaxun(); break;
case 3: tianjia(); break;
case 4: save(); break;
case 5: exit(0); break;
default: break;
}
show();
scanf("%d",&n);
}
FILE *fp;
fp = fopen("e:\\book.txt", "r+");
if(fp==0)
printf("无法打开文件\n");
fclose(fp);
}
展开阅读全文