沈 阳 航 空 航 天 大 学
课程设计
学 号 2010040701020
班 级 04070101
姓 名 万 明 星
指导教师 杨 煦
2011 年 9 月 28 日
沈阳航空航天大学
课程设计任务书
学院:自动化学院 专业:测控技术与仪器 班级:04070101
学号:2010040701020 题目:KTV点歌系统模拟(2)
一、课程设计时间
2011~2012第1学期第4周,共计1周,20学时。
二、课程设计内容
请你模范ktv点歌系统,用C语言编写软件完成以下任务:
1.读取功能:从song.txt 文件中读取歌曲的信息;
2.查看功能:允许用户浏览所用的歌曲,查看某个歌手演唱的所用歌曲;
3.删除功能:删除歌曲。
三、课程设计要求
1.程序质量:
l 贯彻结构化的程序设计思想。
l 用户界面友好,功能明确,操作方便。
l 用户界面中的菜单至少应包括:“读取”、“查看”、“删除”、“退出”4项。
l 代码应适当缩进,并给出必要的注释,以增强程序的可读性。
2.课程设计说明书:
课程结束后,上交课程设计说明书和源程序。课程设计说明书的格式和内容参见提供的模板。
四、指导教师和学生签字
指导教师:________ 学生签名:________
五、成绩
六、教师评语
目录
一、需求分析.......................................................... 1
二、设计分析.......................................................... 2
三、主要界面截图.................................................. 5
四、技术要点.......................................................... 7
五、个人总结.......................................................... 8
六、参考文献.......................................................... 8
七、源程序.............................................................. 8
一、 需求分析
根据任务书给定的“课程设计内容”和“课程设计要求”作如下的需求分析。
该系统是一个常用的ktv点歌系统,可以让用户根据自己的喜好进行添加、查看、删除等操作。系统应该具有便捷、稳定、功能齐全的特点。
1. 便捷性分析
系统管理的歌曲涉及到歌曲的各种信息,数据量较大且是一种基础性数据,能够为用户提供许多快捷操作,且操作方便。
2. 稳定性分析
该系统比较稳定,也比较人性化,只要是用户的合理操作,系统都应给出合理正确的回应,而不是出现令用户感到意外的系统错误或系统崩溃。
3. 主要功能分析
(1)歌曲的添加:允许用户输入添加歌曲的数量、歌曲名、歌手名、专辑名、歌曲流派。同时,系统会自动把添加歌曲信息保存下来。用户由于疏忽录入的非法数据,能够及时提示并更正。
(2)歌曲的查看:用户可以根据自己的需求,输入歌曲名、歌手名、专辑名、歌曲流派中的一项或几项其查看自己想要的歌曲。
(3)歌曲的删除:用户在查看歌曲之后,可以根据自己的喜好,删除系统原有的歌曲。用户只需输入歌曲名就可以删除歌曲。删除之后系统自动更新歌曲库。
二、设计分析
主要有5个功能模块,每个模块对应一个C语言自定义函数。这些函数原型及其功能简述如下:
1、程序总体结构图
图1程序总体结构图
2、主要功能模块框图
(1)读取歌曲函数choice
图2读取流程图
(2)添加歌曲函数add
图3 添加流程图
(3)删除歌曲函数dele
图4删除流程图
三、主要界面截图
图1 程序主界面
图2 数据修改界面
四、技术要点
1、结构体的应用
用结构体来定义描述歌曲编号、歌曲名、歌手名、专辑名、歌曲流派。具体的定义如下:
struct song_info{
int songnum;
char songname[15];
char songername[15];
char ablumname[15];
char type[10];
}; 所定义的结构体主要用于定义数组。
2、文件操作
包括了文件的写入和读取两个方面。文件的写入操作,用于保存录入的歌曲的有关数据,也用于保存所修改的数据。
3、多分支选择结构
在主函数中使用switch语句,利用自定义函数,实现查看、添加、删除歌曲的功能。
五、个人总结
刚开始做的时候,我基本上摸不找头脑,不知道从何处下手。后来,我通过查资料和请教老师,慢慢地学会许多,开始自己做。虽然这期间,我遇到了很多很多的困难,但我收获很多。这次课程设计使我对C语言有了更深的理解,使我知道原来日常生活中的许多系统都是以C语言为基础的,C语言在生产生活应用十分广泛。同时他也锻炼我的逻辑思维能力,提高我解决实际问题的能力。
六、参考文献
1 谭浩强.C程序设计.北京:清华大学出版社,2005
七、源程序
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define N 30
int i,j,k;
FILE *fp;
struct song_info{
int songnum;
char songname[15];
char songername[15];
char ablumname[15];
char type[10];
};
typedef struct song_info SINFO;
SINFO *pso;
void choice(SINFO *pso){
char a[15];
int q,t;
FILE *fp;
printf("请输入要查看歌手的名字:");
scanf("%s",a);
fp=fopen("d:\\song.txt","rt");
if(fp==NULL)
{
printf("the file :song.txt not found!");
exit(-1);
}
for(k=0;(!feof(fp));k++)
fread(&pso[k],sizeof(SINFO),1,fp);
fclose(fp);
t=0;
for(q=0;q<k;q++)
{
if(!strcmp(a,pso[q].songername))
{
if(t==0)
printf("该歌手有以下歌曲:\n");
t++;
printf("%s\n",pso[q].songname);
}
}
if(t==0)
printf("本系统还无该歌手歌曲,请增添!\n");
fclose(fp);
}
void add(SINFO *pso){
FILE *fp;
fp=fopen("d:\\song.txt","a+");
printf("请你输入要增添歌曲的数量:");
scanf("%d",&j);
fflush(stdin);
for(i=0;i<j;i++){
printf("这是要增添的第%d首歌的信息:\n",i+1);
printf("歌曲编号是:");
scanf("%d",&pso[i].songnum);
fflush(stdin);
printf("歌曲名字是:");
gets(pso[i].songname);
fflush(stdin);
printf("歌手名字是:");
gets(pso[i].songername);
fflush(stdin);
printf("专辑的名字是:");
gets(pso[i].ablumname);
fflush(stdin);
printf("歌曲流派是:");
gets(pso[i].type);
fflush(stdin);
system("cls");
fwrite(&pso[i],sizeof(SINFO),1,fp);
}
fclose(fp);
printf("歌曲增添成功!\n");
}
void show(SINFO *pso){
FILE *fp;
fp=fopen("d:\\song.txt","rt");
if(fp==NULL)
{
printf("the file :song.txt not found!");
exit(-1);
}
printf("所有歌曲信息如下:\n");
for(k=0;!feof(fp);k++)
{
fread(&pso[k],sizeof(SINFO),1,fp);
}
fclose(fp);
printf("%s%15s%20s%15s%15s","歌曲编号","歌名","歌手","专辑","歌曲流派");
printf("\n");
for(i=0;i<k-1;i++)
{ printf("%03d%20s%20s%15s%15s",pso[i].songnum,pso[i].songname,pso[i].songername,pso[i].ablumname,pso[i].type);
printf("\n");
}
}
void dele(SINFO *pso){
char a[15];
int q;
FILE *fp;
printf("请输入要删除歌曲的名字:");
scanf("%s",a);
fp=fopen("d:\\song.txt","rt");
if(fp==NULL)
{
printf("the file :song.txt not found!");
exit(-1);
}
for(k=0;(!feof(fp));k++)
fread(&pso[k],sizeof(SINFO),1,fp);
fclose(fp);
for(q=0;q<k;q++)
if(!strcmp(a,pso[q].songname))
memset(&pso[q],0,sizeof(SINFO));
fp=fopen("d:\\song.txt","w+");
for(k=0;k<q;k++)
fwrite(&pso[k],sizeof(SINFO),1,fp);
fclose(fp);
printf("删除信息成功!\n");
}
void out(){
char a;
printf("确认退出系统?(y/n)");
scanf("%c",&a);
if('y'==a)
exit(0);
}
main(){
SINFO *pso;
loop: printf(" 欢迎使用KTV选歌系统 \n");
printf(" 1.选歌 \n");
printf(" 2.新增歌曲 \n");
printf(" 3.查看歌曲信息 \n");
printf(" 4.删除歌曲 \n");
printf(" 5.退出 \n");
printf("请选择功能: ");
scanf("%d",&i);
fflush(stdin);
pso=(SINFO*)malloc(N*sizeof(SINFO));
memset(pso,0,(N*sizeof(SINFO)));
system("cls");
switch(i){
case 1:choice(pso);
goto loop;
break;
case 2:add(pso);
goto loop;
break;
case 3:show(pso);
goto loop;
break;
case 4:dele(pso);
goto loop;
break;
case 5:out();
goto loop;
break;
default:printf("输入错误!请重新选择!\n");
goto loop;
}
}
第二篇:C语言课程设计题目(新)
C语言课程设计题目
C语言课程设计
设计要求与设计报告?
设计要求:
模块化程序设计?
必须上机调试通过
所有题目能将生成的文件存储于外部存储器上,并且从外部存储器上可以读写该文件的功能。
设计报告格式:
1、设计目的
2、总体设计(程序设计组成框图、流程图)
3、详细设计(模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等)
4、调试与测试:调试方法,测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施
5、源程序清单和执行结果:清单中应有足够的注释
检查要求:
1、每个人必须有可运行的程序;
2、每个人必须交《C语言课程设计报告》(打印稿) 打分标准:
根据《C语言课程设计报告》,学生能对自己的程序面对教师提问并能熟练地解释清楚
1职工信息管理系统设计
1. 目的:
(1)要求学生熟练掌握C语言的基本知识和编程技能;
(2)基本掌握结构化程序设计的基本思路和方法;
2. 要求
基本要求:
(1)试设计一个职工信息管理系统,使之能提供以下功能:
(2)系统以菜单方式工作
(3)职工信息录入功能(职工信息用文件保存)——输入
(4)职工信息浏览功能——输出
(5)查询功能:(至少一种查询方式)——算法,按工资查询,按学历查询等
(6)修改职工信息并保存
3.创新要求
在基本要求达到后,可进行创新设计,如对菜单进行美化。
三、信息描述
职工信息包括职工号、姓名、性别、出生年月、学历、职务、工资、住址、电话等(职工号不重复)。
四、功能描述
1. 录入职工信息并保存
2. 显示所有职工信息(以一定的格式)
3. 查询职工信息(以一种或多种方式)
4. 修改职工信息并保存
职工信息管理系统
需求分析
编写目的:
通过对用户需求进行调查分析,写出需求分析文档作为项目设计的基本准则要求,以及作为系统分析员进行系统分析和测试人员进行测试时的手册
需求概述:
设计一个职工信息管理系统,使之能提供以下功能:
1) 录入职工信息并保存
2) 显示所有职工信息
3) 查询职工信息
4) 修改职工信息并保存
需求说明:
职工信息包括职工号、姓名、性别、出生年月、学历、职务、工资、住址、电话等,并且要求职工号不重复;
录入的职工信息要求用文件形式保存,并可以对其进行浏览、查询、修改等基本操作;
职工信息的显式要求有一定的规范格式;
对职工信息应能够分别按工资及按学历两种方式进行,要求能返回所有符合条件的职工的信息;
对职工信息的修改应逐个地进行,一个职工信息的更改不应影响其他的职工记录;
所设计的系统应以菜单方式工作,应为用户提供清晰的使用提示,依据用户的选择来进行各种处理,并要求在此过程中能够尽可能的兼容用户使用过程中的异常情况
总体设计
编写目的:
根据需求分析文档,初步提出问题的解决方案,以及软件系统的体系结构和数据结构的设计方案并写出书面文档总体设计说明书,为下一步进行详细设计做准备。
总体设计:
1. 1. 该系统可以按功能进行模块划分,其模块图如下:
系统模块图
其中:
信息输入模块完成职工信息的输入功能,输入信息包括职工号、姓名、性别、出生年月、学历、职务、工资、住址、电话等;
信息浏览模块完成已录入职工信息的显示;
信息查询模块完成职工信息的查询,查询时对应有按工资查询和按学历查询两种方式;
信息修改模块完成职工信息的修改功能;
菜单选择模块完成用户命令的接收,此模块也是职工信息管理系统的入口,用户所要进行的各种操作均需在此模块中进行选择并进而调用其他模块实现相应的功能;
2. 2. 数据结构
本系统中主要的数据结构就是职工的信息,包含职工号、姓名、性别、出生年月、学历、职务、工资、住址、电话等,在处理过程中各项可以作为一个职工的不同属性来进行处理
3. 3. 程序流程
系统的执行应从功能菜单的选择开始,依据用户的选择来进行后续的处理,直到用户选择退出系统为止,其间应对用户的选择做出判断及异常处理。系统的流程图如下:
程序流程图
详细设计
编写目的:
根据项目概要设计说明书,在项目概要设计的基础之上,对系统进行详细设计,以便下一步进行程序编码工作。
详细设计:
对应于总体设计时的系统功能模块图,各个功能模块的处理逻辑如下: ① 信息输入模块:
打开职工信息文件;
while ( 继续输入 )
{
读入职工信息;
将读入信息添加到职工信息文件中;
提示是否继续输入;
}
关闭职工信息文件;
② 信息浏览模块:
打开职工信息文件;
while ( 不到文件结束 )
{
从文件中顺序读出一个职工的信息;
按指定格式输出该职工的信息;
}
关闭职工信息文件;
③ 信息查询模块:
while ( 仍继续查询 )
{
if( 按工资查询 )
{
读入查询的职工工资条件;
打开职工信息文件;
while( 不到文件结束 )
{
顺序读出一个职工的信息;
if( 该职工信息的工资符合条件 ) 输出该职工的信息;
}
关闭职工信息文件;
提示共有几条符合条件的记录;
}
else
if ( 按学历查询 )
{
读入学历查询的条件;
打开职工信息文件;
while( 不到文件结束 )
{
顺序读出一个职工的信息;
if( 该职工信息的学历符合条件 ) 输出该职工的信息;
}
关闭职工信息文件;
提示符合条件的记录数;
}
else 提示输入不合适;
提示是否继续查询;
}
信息修改模块:
while( 继续修改 )
{
从给出信息文件中所有的记录情况;
提示并读入待修改的记录的职工的职工号;
打开职工信息文件;
查找并读出该职工的信息到一个中间变量中;
提示并读入要针对该职工的哪个属性进行修改;
根据用户的选择提示并读入所要修改属性的新值;
在该职工的中间变量中修改刚刚读入的属性值;
提示是否确定要进行修改;
如果用户确定则将中间变量重新写回到原职工信息文件中; 关闭职工信息文件;
}
⑤ 菜单选择模块:
给出信息提示;
清屏;
绘制菜单(包含输入、显示、查询、修改、退出); 提示菜单选择并读入到变量;
根据读入变量的值调用不同的模块函数;
④
数据结构:
struct Date
{
int year;
int month;
int day;
};
struct Info
{
char num[5]; /* 职工号 */ char name[8]; /* 姓名 */ char sex[6]; /* 性别 */
struct Date birthday; /* 出生年月*/ char education[8]; /* 学历 */ char duty[8]; /* 职务 */ float wage; /* 工资 */ char addr[12]; /* 地址 */ char phone[8]; /* 电话 */ }