资源描述
影碟管理系统
42
2020年4月19日
文档仅供参考
内蒙古科技大学
本科生课程设计说明书
题 目:C语言课程设计
—— 影碟信息管理系统
学生姓名:曹政
学 号:
专 业:计算机科学与技术
班 级:13—计算机—2班
指导教师:周李涌
内蒙古科技大学课程设计任务书
课程名称
C语言课程设计
设计题目
影碟信息管理系统
指导教师
周李涌
时间
-12-30~ -1-3
一、教学要求
1. 巩固和加深学生对C语言课程的基本知识的理解和掌握
2. 掌握C语言编程和程序调试的基本技能
3. 利用C语言进行基本的软件设计
4. 掌握书写程序设计说明文档的能力
5. 提高运用C语言解决实际问题的能力
二、设计资料及参数
每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。
影碟信息管理系统
图影碟息包括:电影名称、出品公司、导演姓名、主演姓名(至少2个)、上映时间、库存数量、价格等。试设计一影碟信息管理系统,使之能提供以下功能:
v 影碟信息录入功能(影碟信息用文件保存)--输入;影碟信息浏览功能--输出
v 查询或排序功能:(至少两种查询方式)--算法
●按电影名称查询 ●按主演姓名查询
v 影碟信息的插入、删除与修改
v 影碟的借出与归还
三、设计要求及成果
1. 分析课程设计题目的功能需求(可选用数组或链表实现,可多人(最多3人)协作完成一个题目)
2. 写出详细设计说明(至少包括功能实现分析和模块流程图)
3. 编写程序代码,调试程序使其能正确运行(代码书写要规范,标示符要见名知意,要有必要的注释,每人至少3个函数,每人至少200行代码,不包括注释和花括号)
4. 设计完成的软件要便于操作和使用
5. 设计完成后提交课程设计报告(请严格按照模板进行排版)
四、进度安排
第一天 选择课程设计题目,分析课题的要求
第二天 编程
第三天 编程及调试
第四天 写课程设计报告
第五天 提交课程设计报告(打印稿及电子稿)
目录
内蒙古科技大学课程设计任务书 I
简介 III
第一部分:程序总体设计思路 4
1.1 结构体设计 4
1.2 运行界面设计 4
第二部分: 详细设计 8
2.1 输入模块设计 8
2.2 输出模块设计 9
2.3 查找模块设计 9
2.4 借阅与归还模块设计 10
2.5 删除模块设计 14
第三部分: 课程设计总结 16
附录:程序代码 17
简介
由于C语言是面对过程的语言,故我的设计思路是根据目标程序
运行的过程来编写的。
具体设计思路如下:
程序的需求是设计影碟信息管理系统,对选修课程能够进行录入和修改操作等,要求有菜单界面和退出功能。首先如果设计一个添加函数把要录入的碟片录入一个文件中,再建立一个借阅者文件把借阅人放入其中。然后建立添加、浏览删除、查询、借阅和归还等函数,经过函数的层层调用来实现程序的逻辑结构。中间经过文件的打开和关闭实现对文件内容所包含的数据的操作。整个程序的设计思路到此结束。
开始
N
Y
请根据菜单进行选择
结束
是否退出
菜单
4.
碟片借阅归还
3.
碟片信息查询
2.
浏览碟片信息
1.
录入
碟片
信息
5.
用户信息添加
第一部分:程序总体设计思路
1.1结构体设计
数据项描述={数据项名,数据类型,长度};
影片信息={
影片ID,CHAR,10;
片名,CHAR,20;
导演,CAHR,20;
介绍,CAHR,200;
上映时间,DATE,10
};
租借记录={
记录项ID,CHAR,10;
借出时间,DATE,10;
归还时间,DATE,10;
租金,INT,4
}
1.2运行界面设计
进入主菜单
图1.1
选择A进行碟片添加
图1.2
选择B进行查询
图1.3
选择E进行借阅人添加
图1.4
选择C进行碟片借阅
图1.5
选择F进行碟片浏览
图1.6
选择G碟片删除
图1.7
第二部分 详细设计
2.1 输入模块设计
定义一个add添加函数添加碟片
开始
输入影碟信息
If 0==cd_number
else
以写入方式打开文件进行添加
以追加方式打开文件进行添加
cd_number++
结束
void add(void)//
{
FILE *a; //文件指针
printf("请输入碟片名称:\n");
scanf("%s",CD[cd_number].film_name);
printf("请输入出品公司:\n");
scanf("%s",CD[cd_number].film_gongsi);
printf("请输入导演姓名:\n");
scanf("%s",CD[cd_number].film_daoyan);
printf("请输入主演姓名:\n");
scanf("%s",CD[cd_number].film_zhuyan);
printf("请输入上映时间:\n");
scanf("%s",CD[cd_number].shijie);
getchar();
n = 1; //修改借阅标记
if(0==cd_number)
{
a=fopen("cd.txt","wb");
fwrite(&CD[cd_number],sizeof(struct cd),1,a);
}
else
{
a=fopen("cd.txt","ab");
fwrite(&CD[cd_number], sizeof(struct cd), 1, a);
}
cd_number++;
printf("影片添加成功\n");
getchar();
fclose(a);
}
2.2 输出模块设计
定义一个read函数浏览所有碟片信息
开始
I=0;i++
输出影碟信息
i<cd_number
结束
void read(void)
{
int i;
int n;
system("cls");
printf("碟片名称 出品公司 导演姓名 主演姓名 上映时间\n");
for(i=1;i<cd_number;i++)
{
printf("%s %s %s %s %s \n",
CD[i].film_name,CD[i].film_gongsi,CD[i].film_daoyan,
CD[i].film_zhuyan,CD[i].shijie);
}
scanf("%d",&n);
}
2.3查找模块设计
定义一个cheak函数从文件中查找相应的碟片信息
开始
I=0;
CD[i].film_name,cd_name==0
I++
输出影碟信息
i<cd_number
结束
void check(void)//
{
int i;
char cd_name[10];
system("cls");
printf("请要查询的输入碟片名:\n");
scanf("%s",cd_name);
printf("碟片名称 出品公司 导演姓名 主演姓名 上映时间\n");
for(i = 0; i < cd_number; i++)
{
if(strcmp(CD[i].film_name,cd_name)==0)
{
printf("%s %s %s %s %s %d\n",
CD[i].film_name,CD[i].film_gongsi,CD[i].film_daoyan,
CD[i].film_zhuyan,CD[i].shijie);
}
if(i==cd_number) printf("抱歉,不能找到。\n");
}
getchar();
getchar();
}
2.4 借阅与归还模块设计
定义一个借阅和归还函数,经过输入碟片名查找与之相符的碟片进行借阅或归还。
找到要借阅的碟片借阅
借阅
结束
开始
归还借阅的碟片,n-1
归还
void rent(void) //
{
int n;
char user_name[10];
char cd_name[10];
FILE *a;//
FILE *b;//
int k=0;
a = fopen("rent.txt","r");
b = fopen("cd.txt","r");
for (int i = 0; i < cd_number; i++)
{
fread(&CD[i], sizeof(struct cd),1,b);
}
for (i = 0; i < user_number; i++)
{
fread(&RENT[i],sizeof(struct rent),1,a);
}
printf("请输入借阅人:\n");
scanf("%s",user_name);
getchar();
printf("请输入碟片名称\n");
scanf("%s",cd_name);
getchar();
printf("请再次输入碟片名称:\n");
scanf("%s",RENT[i].film_name[k]);
k++;
getchar();
printf("已借%d张\n",k);
for (int j = 0; j < cd_number; j++)
{
if((strcmp(CD[j].film_name, cd_name))==0)
{
n=0;
}
}
printf("请输入借出日期:\n");
scanf("%d",&RENT[i].rent_time);
printf("借阅成功\n");
scanf("%d",&n);
fclose(a);
fclose(b);
}
//--------------碟片归还函数----------------------------
void returnn (void) //
{
int n;
char user_name[10];
char cd_name[10];
FILE *a;
FILE *b;
int i;
int j;
int k = 0;
a = fopen("rent.txt","r");
b = fopen("cd.txt","r");
for (i = 0; i < cd_number; i++)
{
fread(&CD[i], sizeof(struct cd), 1, b);
}
for (i = 0; i < user_number; i++)
{
fread(&RENT[i], sizeof(struct rent), 1, a);
}
printf("请输入借阅人:\n");
scanf("%s",user_name);
for (i = 0; i < user_number; i++)
{
if ((strcmp(user_name, RENT[i].username))==0)
{
printf("输入要归还的碟片名:\n");
scanf("%s",cd_name);
for (j = 0; j < cd_number; j++)
{
if((strcmp(CD[j].film_name, cd_name))==0)
{
n = 1;
break;
}
}
}
}
printf("借出日期:%d\n",RENT[i].rent_time);
printf("归还日期:\n");
scanf("%d",&RENT[i].return_time);
getchar();
if (((RENT[i].return_time - RENT[i].rent_time) % 3)==0)
{
RENT[i].money = (RENT[i].return_time - RENT[i].rent_time) / 3;
}
else
{
RENT[i].money = (RENT[i].return_time - RENT[i].rent_time) / 3 + 1;
}
printf("租金:%d\n",RENT[i].money);
scanf("%d",&n);
fclose(a);
fclose(b);
}
2.5 删除模块设计
经过定义一个Delete删除函数进行删除,首先从文件中查找到与之对应的信息后面的覆盖到前面进行删除。
开始
i<cd_number
删除影碟信息
I=0;
CD[i].film_name,cd_name==0
I++
结束
void shanchu(void)
{
int i,j,key;
char cd_name[10];
system("cls");
printf("请输入要删除的碟片:");
scanf("%s",&cd_name);
if(cd_name==0) return;
for(i=0;i<cd_number;i++)
{
if(strcmp(CD[i].film_name,cd_name)==0)
{
cd_number--;
for(j=i;j<cd_number;j++)
strcpy(CD[i].film_name,CD[j+1].film_name);
strcpy(CD[i].film_gongsi,CD[j+1].film_gongsi);
strcpy(CD[i].film_daoyan,CD[j+1].film_daoyan);
strcpy(CD[i].film_zhuyan,CD[j+1].film_zhuyan);
strcpy(CD[i].shijie,CD[j+1].shijie);
key=1;
printf("删除成功!");
getchar();
getchar();
}
}
if(key!=1)
{
printf("无此碟片!");
getchar();
getchar();
}
第三部分 课程设计总结
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,C语言编程已经成为当今计算机应用中空前活跃的领域, 在生活中能够说得是无处不在。因此作为二十一世纪的大学来说掌握计算机编程的开发技术是十分重要的。
回顾起此次影碟信息管理课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整几个星期的日子里,能够说得是苦多于甜,可是能够学到很多很多的的东西,同时不但能够巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。经过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,能够说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,经过这次课程设计之后,一定把以前所学过的知识重新温故。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在自己查阅各种资料下,终于游逆而解。同时,我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!
附录:程序代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void add(void); //新片上架函数
void read(void);//浏览碟片
void shanchu(void);//删除碟片
void check(void); // 碟片查询函数
void rent(void); //碟片借阅函数
void useradd(void); //使用者添加
void returnn (void);// 碟片归还函数
int user_number =2; //定义会员函数
int cd_number =1; //定义碟片函数
struct cd//碟片结构体
{
char film_name[10]; //碟片名称
char film_gongsi[10]; //出品公司
char film_daoyan[10]; //导演姓名
char film_zhuyan[10]; //主演姓名
char shijie[5]; //上映时间
};
int n;//借阅标记
struct rent//碟片借阅结构体
{
char username[10]; //使用者名
char film_name[10][10]; //碟片名称
int rent_time; //借出日期
int return_time; //归还日期
int money; //租金
};
struct cd CD[1000]; //定义CD函数
struct rent RENT[1000]; //定义出租函数
//-----------------------主函数------------------------------------
void main() //主函数
{
char choice; //菜单
a: printf(" *********欢迎进入影片信息管理系统********* \n");
printf(" --------------------------------------------------\n");
printf(" 请输入你的选择 \n");
printf(" A:影片添加 \n");
printf(" B:碟片查询 \n");
printf(" C:碟片借阅 \n");
printf(" D:碟片归还 \n");
printf(" E:借阅者注册 \n");
printf(" F碟片浏览 \n");
printf(" G碟片删除 \n");
printf(" H退出程序 \n");
printf(" -------------------------------------------------\n");
scanf("%c",&choice);
switch(choice) //多条件选择判断
{
case 'A':
{
add(); //碟片添加函数
break;
}
case 'B':
{
check(); //碟片查询函数
break;
}
case 'C':
{
rent(); //碟片借出函数
break;
}
case 'D':
{
returnn();//碟片归还函数
break;
}
case'E':
{
useradd();//使用者注册函数
break;
}
case'F':
{
read();//浏览函数
break;
}
case'G':
{
shanchu(); //删除函数
break;
}
case'H':
exit(0);//退出函数
}
system("cls");
goto a;
}
//----------------碟片添加-----------------------
void add(void)//新片添加
{
FILE *a; //文件指针
printf("请输入碟片名称:\n");
scanf("%s",CD[cd_number].film_name);
printf("请输入出品公司:\n");
scanf("%s",CD[cd_number].film_gongsi);
printf("请输入导演姓名:\n");
scanf("%s",CD[cd_number].film_daoyan);
printf("请输入主演姓名:\n");
scanf("%s",CD[cd_number].film_zhuyan);
printf("请输入上映时间:\n");
scanf("%s",CD[cd_number].shijie);
getchar();
n = 1; //修改借阅标记
if(0==cd_number)
{
a=fopen("cd.txt","wb");
fwrite(&CD[cd_number],sizeof(struct cd),1,a);
}
else
{
a=fopen("cd.txt","ab");
fwrite(&CD[cd_number], sizeof(struct cd), 1, a);
}
cd_number++;
printf("影片添加成功\n");
getchar();
fclose(a);
}
//--------------------浏览影碟信息-----------------------------------
void read(void)
{
int i;
int n;
system("cls");
printf("碟片名称 出品公司 导演姓名 主演姓名 上映时间\n");
for(i=1;i<cd_number;i++)
{
printf("%s %s %s %s %s \n",
CD[i].film_name,CD[i].film_gongsi,CD[i].film_daoyan,
CD[i].film_zhuyan,CD[i].shijie);
}
scanf("%d",&n);
}
//--------------------影碟信息查询------------------------------
void check(void)//
{
int i;
char cd_name[10];
system("cls");
printf("请要查询的输入碟片名:\n");
scanf("%s",cd_name);
printf("碟片名称 出品公司 导演姓名 主演姓名 上映时间\n");
for(i = 0; i < cd_number; i++)
{
if(strcmp(CD[i].film_name,cd_name)==0)
{
printf("%s %s %s %s %s %d\n",
CD[i].film_name,CD[i].film_gongsi,CD[i].film_daoyan,
CD[i].film_zhuyan,CD[i].shijie);
}
if(i==cd_number) printf("抱歉,不能找到。\n");
}
getchar();
getchar();
}
//------------借阅者添加函数---------------------------------
void useradd(void)//添加
{
system("cls");//清屏
FILE *a; //文件指针
printf("请输入姓名:\n");
scanf("%s",RENT[user_number].username);
getchar();
a = fopen("rent.txt","ab");//追加方式打开
fwrite(&RENT[user_number], sizeof(struct rent), 1, a);//把a中一个rent结构体赋给RENT[user_number]
printf(" 添加成功 \n");
user_number++;
getchar();
fclose(a);
}
//-------------碟片借阅函数-----------------------------
void rent(void) //
{
int n;
char user_name[10];
char cd_name[10];
FILE *a;//
FILE *b;//
int k=0;
a = fopen("rent.txt","r");
b = fopen("cd.txt","r");
for (int i = 0; i < cd_number; i++)
{
fread(&CD[i], sizeof(struct cd),1,b);
}
for (i = 0; i < user_number; i++)
{
fread(&RENT[i],sizeof(struct rent),1,a);
}
printf("请输入借阅人:\n");
scanf("%s",user_name);
getchar();
printf("请输入碟片名称\n");
scanf("%s",cd_name);
getchar();
printf("请再次输入碟片名称:\n");
scanf("%s",RENT[i].film_name[k]);
k++;
getchar();
printf("已借%d张\n",k);
for (int j = 0; j < cd_number; j++)
{
if((strcmp(CD[j].film_name, cd_name))==0)
{
n=0;
}
}
printf("请输入借出日期:\n");
scanf("%d",&RENT[i].rent_time);
printf("借阅成功\n");
scanf("%d",&n);
fclose(a);
fclose(b);
}
//--------------碟片归还函数----------------------------
void returnn (void) //
{
int n;
char user_name[10];
char cd_name[10];
FILE *a;
FILE *b;
int i;
int j;
int k = 0;
a = fopen("rent.txt","r");
b = fopen("cd.txt","r");
for (i = 0; i < cd_number; i++)
{
fread(&CD[i], sizeof(struct cd), 1, b);
}
for (i = 0; i < user_number; i++)
{
fread(&RENT[i], sizeof(struct rent), 1, a);
}
printf("请输入借阅人:\n");
scanf("%s",user_name);
for (i = 0; i < user_number; i++)
{
if ((strcmp(user_name, RENT[i].username))==0)
{
printf("输入要归还的碟片名:\n");
scanf("%s",cd_name);
for (j = 0; j < cd_number; j++)
{
if((strcmp(CD[j].film_name, cd_name))==0)
{
n = 1;
break;
}
}
}
}
printf("借出日期:%d\n",RENT[i].rent_time);
printf("归还日期:\n");
scanf("%d",&RENT[i].return_time);
getchar();
if (((RENT[i].return_time - RENT[i].rent_time) % 3)==0)
{
RENT[i].money = (RENT[i].return_time - RENT[i].rent_time) / 3;
}
else
{
RENT[i].money = (RENT[i].return_time - RENT[i].rent_time) / 3 + 1;
}
printf("租金:%d\n",RENT[i].money);
scanf("%d",&n);
fclose(a);
fclose(b);
}
//------------------删除碟片-----------------------
void shanchu(void)
{
int i,j,key;
char cd_name[10];
system("cls");
printf("请输入要删除的碟片:");
scanf("%s",&cd_name);
if(cd_name==0) return;
for(i=0;i<cd_number;i++)
{
if(strcmp(CD[i].film_name,cd_name)==0)
{
cd_number--;
for(j=i;j<cd_number;j++)
strcpy(CD[i].film_name,CD[j+1].film_name);
strcpy(CD[i].film_gongsi,CD[j+1].film_gongsi);
strcpy(CD[i].film_daoyan,CD[j+1].film_daoyan);
strcpy(CD[i].film_zhuyan,CD[j+1].film_zhuyan);
strcpy(CD[i].shijie,CD[j+1].shijie);
key=1;
printf("删除成功!");
getchar();
getchar();
}
}
if(key!=1)
{
printf("无此碟片!");
getchar();
getchar();
}
}
展开阅读全文