资源描述
C语言课程设计实习报告
专 业:
学 号:
班级序号:
姓 名:
指导教师:
C语言程序设计报告
(实习日期: 2010-8至2010-9)
一、C语言课程设计的目的:
高级语言课程设计是学习完《高级语言程序设计》课程后进行的一次全面的综合性上机实验。其目的在于为同学提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼同学的分析解决实际问题的能力。提高学生适应实际,实践编程的能力。
二、 题目:歌曲信息管理系统
需求分析:制作一个歌曲信息管理系统使之有以下功能
1 歌曲信息包括歌曲名,作者,演唱者,发行年月等。
2 可以对歌曲信息进行输入,删除,浏览。
3 可以查询歌曲名,作者,演唱者信息。
4 可以提供按作者显示功能。
5 用文件存储信息。
三、 总体设计
根据分析,整个系统可设计为以下4个模块:
信息输入模块,删除模块,浏览模块。查找模块。
歌曲管理系统
输入模块
(enter)
删除模块
(delete)
浏览模块
(browse)
查找模块
(search)
退出模块
(exit)
(图 1)
信息输入:依次按顺序结构输入歌曲名,作者,演唱者,发行年月。
输入模块
(enteer)
输入作者
(author)
输入歌曲名
(song’s name)
输入演唱者
(singer)
输入日期
(outday)
继续输入?
(Y/N)
(图 2)
信息删除:根据输入的歌曲名,作者,演唱者等一项可以删除对应的其他项
删除模块
(delete)
输入歌曲名
(enter name)
输入作者
(enter author)
输入演唱者
(enter singer)
( 图 3)
信息浏览:可以直接浏览歌曲,作者,演唱者,发行年月。
歌曲浏览
浏览作者
浏览歌曲名
浏览演唱者
浏览日期
(图4)
信息查找:可以查找歌曲,作者等。并且可以选择查找的方式:按作曲者、按演唱者、按歌曲名字。
查找模块
(search)
按作者查找
(by author)
按演唱者查找
(by singer)
按歌曲名字查找
(by name)
输入作者
(enter author)
输入演唱者
(enter singer)
输入歌曲名字
(enter name)
要找的信息
要找的信息
要找的信息
(图 5)
退出模块点击直接退出
四 详细设计
1 结构体
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
int i=0;
struct system
{
char author[20];
char singer[20];
char time[20];
char name[20];
} dan[100];
2 主函数
主函数的设计提供数据输入、数据处理和数据输出以及各种函数的调用。其中各功能模块用菜单方式选择;另外,部分菜单也可以写成函数。
void main()
{
void menu();
void function1();
void function2();
void function3();
void function4();
menu();
return;
}
题目对应具体的程序如下:
main()
{
int a;
while(1)
{
printf("\t\tWelcome to the song'system!------by long\n");
printf("\t\t******************^o^ MENU ^o^*******************\n\n");
printf("\t\t\t(1).Enter\n");
printf("\t\t\t(2).Delete\n");
printf("\t\t\t(3).Browse\n");
printf("\t\t\t(4).Search\n");
printf("\t\t\t(0).exit\n");
printf("\t\t*************************************************\n");
printf("\n\t\t\tPlease choose the number(0-4):");
scanf("%d",&a);
if(a==0) break;
switch(a)
{
case 1:enter();break;
case 2:delete();break;
case 3:browse();break;
case 4:search();break;
}
}
}
主函数的流程图如图6
开始
显示一系列功能
判断
根据判断的值调用各功能模块函数
结束
(图 6)
3 各功能模块设计
(1)输入模块
void enter()
{
int j;
char c[2];
FILE *fp;
if((fp=fopen("data.txt","w"))==NULL)
{
printf("Can not open the file!\n");
exit(0);
}
for(j=0;j<i;j++)
{
fwrite(&dan[j],sizeof(struct system),1,fp);
}
while(1)
{
printf("Please input the author:\n");
scanf("%s",dan[i].author);
printf("Please input the song's name:\n");
scanf("%s",dan[i].name);
printf("Please input the singer:\n");
scanf("%s",dan[i].singer);
printf("Please input the outday:\n");
scanf("%s",dan[i].time);
if(fwrite(&dan[i++],sizeof(struct system),1,fp)!=1)
printf("File write error\n");
else printf("Successful!\n");
printf("Is there any more?( Yes[y]/No[n]) \n");
scanf("%s",c);
if(strcmp(c,"n")==0)break;
}
fclose(fp);
}
输入作者
输入歌曲名字
输入演唱者
输入发行日期
是否继续输入?
(图 7)
( 图 2)
2 删除模块:
用户输入要删除的信息,如输入歌曲名 ,根据歌曲名找到其他记录并删除。
[程序]
void delete()
{
int j,v,c;
char w[20];
FILE *fp;
printf("Please input the song'name which you want to delete:");
scanf("%s",w);
fp=fopen("data.txt","rb");
for(j=0;j<100;j++)
{
if(fread(&dan[j],sizeof(struct system),1,fp)!=1) break;
}
v=j;
for(j=0;j<v;j++)
{
if(strcmp(w,dan[j].name)==0)
c=j;
}
fclose(fp);
fp=fopen("data.txt","wb");
for(j=0;j<v;j++)
{
if(j!=c)
fwrite(&dan[j],sizeof(struct system),1,fp);
}
fclose(fp);
printf("Delete OK!\n");
i--;
}
3·浏览模块:
在用户按下菜单后直接显示出所有歌曲信息。
void browse()
{
int j;
FILE *fp;
fp=fopen("data.txt","rb");
for(j=0;j<100;j++)
{
if(fread(&dan[j],sizeof(struct system),1,fp)==1)
{
printf("Name:%s\n",dan[j].name);
printf("Author:%s\n",dan[j].author);
printf("Singer:%s\n",dan[j].singer);
printf("Outday:%s\n",dan[j].time);
printf("---------------------------------\n");
}
else break;
}
fclose(fp);
}
4·查找模块:
用户输入要查找的歌曲名或歌曲的任意信息,按菜单键。
void search()
{
int flag,j,x;
char w[20];
FILE *fp;
char v[20];
printf("(1)By author\n");
printf("(2)By singer\n");
printf("(3)By name\n");
printf("Please choose which you want to search:\n");
scanf("%d",&x);
if(x==3)
{
flag=0;
printf("Please input the song's name:");
scanf("%s",&w);
fp=fopen("data.txt","rb");
for(j=0;j<100;j++)
{
if(fread(&dan[j],sizeof(struct system),1,fp)!=1) break;
if(strcmp(dan[j].name,w)==0)
{
printf("Name:%s\n",dan[j].name);
printf("Author:%s\n",dan[j].author);
printf("Singer:%s\n",dan[j].singer);
printf("Outday:%s\n",dan[j].time);
printf("---------------------------------\n");
flag=1;
}
}
if(flag==0)
printf("Cannot find the song!\n");
fclose(fp);
}
else if(x==2)
{
flag=0;
printf("Please input the singer:");
scanf("%s",&v);
fp=fopen("data.txt","rb");
for(j=0;j<100;j++)
{
if(fread(&dan[j],sizeof(struct system),1,fp)!=1) break;
if(strcmp(dan[j].singer,v)==0)
{
printf("Name:%s\n",dan[j].name);
printf("Author:%s\n",dan[j].author);
printf("Singer:%s\n",dan[j].singer);
printf("Outday:%s\n",dan[j].time);
printf("---------------------------------\n");
flag=1;
}
}
if(flag==0)
printf("Cannot find the song!\n");
fclose(fp);
}
else if(x==1)
{
flag=0;
printf("Please input the author:");
scanf("%s",w);
fp=fopen("data.txt","rb");
for(j=0;j<100;j++)
{
if(fread(&dan[j],sizeof(struct system),1,fp)!=1) break;
if(strcmp(dan[j].author,w)==0)
{
printf("Name:%s\n",dan[j].name);
printf("Author:%s\n",dan[j].author);
printf("Singer:%s\n",dan[j].singer);
printf("Outday:%s\n",dan[j].time);
printf("---------------------------------\n");
flag=1;
}
}
if(flag==0)
printf("Cannot find the song!\n");
fclose(fp);
}
else printf("Error!\n");
}
开始
输入歌曲信息
找到记录?
显示找到的记录
提示没有找到
继续查找?
用户选择:1)查找另一个2)删除3)浏览4)输入另一个
结束
(图 8)
整个程序的流程图如上图8
五 上机操作
1. 主菜单函数
2 输入模块
3.删除模块
4浏览模块.
5.查找模块
按作者查找:
按演唱者查找:
按歌曲名字查找:
6.退出模块
学 习 心 得
通过此次C语言程序设计实践,我实在是获益匪浅!刚开始对C语言基本上是什么都不懂,当要开始设计的时候,还真不知从哪下手!结果,第一次的上机,就真的不知道干什么了,后来只写了几个预处理命令。
一开始做题,也是有点模糊,在指导老师的指导下,我们慢慢的进入状态,我做的是一个歌曲管理系统,内容包括很多。运用的函数也是非常的复杂,首先完成了结构体,经过几天的努力,我完成了大半个程序,但是总是有很多错误出现,有好多是些小问题,这都是我的粗心大意造成的,所以设计程序一定要仔细,不容一点的马虎。当然也有大问题,关于文件的操作,是我们最大的问题,不过,我们做好后,经过老师的讲解和改错,我们也懂得设计和运用了。同时,也让我知道了,不懂就要问,没有老师和同学的帮助,我也不能在规定时间内完成。
这次设计,让我重新掌握了C语言,而且还得到了用C语言解决实际问题的宝贵经验,也从中学到了很多东西。让我懂得了做什么事都要有耐心,要有对什么事都认真仔细的品质。还有老师的帮助与指导,让我学会了很多以前不懂的东西,使我更加意识到实践的重要性!
六、算法和系统的优缺点:
此系统的最大有点是简洁,易懂易操作。其中的信息都以文件储存,便于调用。但是次系统不能够在删除的时候按照操作者的想要的方式进行删除。另外在退出系统后直接退出了系统。
改进思路:
在删除模块中加入可选择的删除模式,达到如查找模块一样的可选择模式删除。另外在退出系统模块中加入返回主菜单功能。
七 :原代码(附录)
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
int i=0;
struct system
{
char author[20];
char singer[20];
char time[20];
char name[20];
} dan[100];
void enter()
{
int j;
char c[2];
FILE *fp;
if((fp=fopen("data.txt","w"))==NULL)
{
printf("Can not open the file!\n");
exit(0);
}
for(j=0;j<i;j++)
{
fwrite(&dan[j],sizeof(struct system),1,fp);
}
while(1)
{
printf("Please input the author:\n");
scanf("%s",dan[i].author);
printf("Please input the song's name:\n");
scanf("%s",dan[i].name);
printf("Please input the singer:\n");
scanf("%s",dan[i].singer);
printf("Please input the outday:\n");
scanf("%s",dan[i].time);
if(fwrite(&dan[i++],sizeof(struct system),1,fp)!=1)
printf("File write error\n");
else printf("Successful!\n");
printf("Is there any more?( Yes[y]/No[n]) \n");
scanf("%s",c);
if(strcmp(c,"n")==0)break;
}
fclose(fp);
}
void delete()
{
int j,v,c;
char w[20];
FILE *fp;
printf("Please input the song'name which you want to delete:");
scanf("%s",w);
fp=fopen("data.txt","rb");
for(j=0;j<100;j++)
{
if(fread(&dan[j],sizeof(struct system),1,fp)!=1) break;
}
v=j;
for(j=0;j<v;j++)
{
if(strcmp(w,dan[j].name)==0)
c=j;
}
fclose(fp);
fp=fopen("data.txt","wb");
for(j=0;j<v;j++)
{
if(j!=c)
fwrite(&dan[j],sizeof(struct system),1,fp);
}
fclose(fp);
printf("Delete OK!\n");
i--;
}
void browse()
{
int j;
FILE *fp;
fp=fopen("data.txt","rb");
for(j=0;j<100;j++)
{
if(fread(&dan[j],sizeof(struct system),1,fp)==1)
{
printf("Name:%s\n",dan[j].name);
printf("Author:%s\n",dan[j].author);
printf("Singer:%s\n",dan[j].singer);
printf("Outday:%s\n",dan[j].time);
printf("---------------------------------\n");
}
else break;
}
fclose(fp);
}
void search()
{
int flag,j,x;
char w[20];
FILE *fp;
char v[20];
printf("(1)By author\n");
printf("(2)By singer\n");
printf("(3)By name\n");
printf("Please choose which you want to search:\n");
scanf("%d",&x);
if(x==3)
{
flag=0;
printf("Please input the song's name:");
scanf("%s",&w);
fp=fopen("data.txt","rb");
for(j=0;j<100;j++)
{
if(fread(&dan[j],sizeof(struct system),1,fp)!=1) break;
if(strcmp(dan[j].name,w)==0)
{
printf("Name:%s\n",dan[j].name);
printf("Author:%s\n",dan[j].author);
printf("Singer:%s\n",dan[j].singer);
printf("Outday:%s\n",dan[j].time);
printf("---------------------------------\n");
flag=1;
}
}
if(flag==0)
printf("Cannot find the song!\n");
fclose(fp);
}
else if(x==2)
{
flag=0;
printf("Please input the singer:");
scanf("%s",&v);
fp=fopen("data.txt","rb");
for(j=0;j<100;j++)
{
if(fread(&dan[j],sizeof(struct system),1,fp)!=1) break;
if(strcmp(dan[j].singer,v)==0)
{
printf("Name:%s\n",dan[j].name);
printf("Author:%s\n",dan[j].author);
printf("Singer:%s\n",dan[j].singer);
printf("Outday:%s\n",dan[j].time);
printf("---------------------------------\n");
flag=1;
}
}
if(flag==0)
printf("Cannot find the song!\n");
fclose(fp);
}
else if(x==1)
{
flag=0;
printf("Please input the author:");
scanf("%s",w);
fp=fopen("data.txt","rb");
for(j=0;j<100;j++)
{
if(fread(&dan[j],sizeof(struct system),1,fp)!=1) break;
if(strcmp(dan[j].author,w)==0)
{
printf("Name:%s\n",dan[j].name);
printf("Author:%s\n",dan[j].author);
printf("Singer:%s\n",dan[j].singer);
printf("Outday:%s\n",dan[j].time);
printf("---------------------------------\n");
flag=1;
}
}
if(flag==0)
printf("Cannot find the song!\n");
fclose(fp);
}
else printf("Error!\n");
}
main()
{
int a;
while(1)
{
printf("\t\tWelcome to the song'system!------by long\n");
printf("\t\t******************^o^ MENU ^o^*******************\n\n");
printf("\t\t\t(1).Enter\n");
printf("\t\t\t(2).Delete\n");
printf("\t\t\t(3).Browse\n");
printf("\t\t\t(4).Search\n");
printf("\t\t\t(0).exit\n");
printf("\t\t*************************************************\n");
printf("\n\t\t\tPlease choose the number(0-4):");
scanf("%d",&a);
if(a==0) break;
switch(a)
{
case 1:enter();break;
case 2:delete();break;
case 3:browse();break;
case 4:search();break;
}
}
}
35 / 35
展开阅读全文