C语言程序设计
—歌曲信息管理系统
C语言程序设计报告—歌曲信息管理系统
C语言课程设计
班级序号: 5507133 姓 名:指导教师: 刘文忠
成 绩:
学 号: 20071004369
实习日期: 2008-12至2009-1
C语言程序设计报告
一、 C语言课程设计的目的:
高级语言课程设计是学习完《高级语言程序设计》课程后进行的一次全面的综合性上机实验。其目的在于为同学提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼同学的分析解决实际问题的能力。提高学生适应实际,实践编程的能力。
二、 题目:歌曲信息管理系统
需求分析:制作一个歌曲信息管理系统
使之有以下功能
1 歌曲信息包括歌曲名,作者,演唱者,发行年月等。 2 可以对歌曲信息进行输入,删除,浏览。
3 可以查询歌曲名,作者,演唱者信息。
4 可以提供按作者显示功能。
5 用文件存储信息。
三 总体设计
根据分析,整个系统可设计为以下4个模块:
信息输入模块,删除模块,浏览模块。查找模块。
信息删除:根据输入的歌曲名,作者,演唱者等一项可以删除对应的其他项 信息浏览:可以直接浏览歌曲,作者,演唱者,发行年月。 信息查找:可以查找歌曲,作者等。
四 详细设计
1 主函数
主函数的设计提供数据输入、数据处理和数据输出以及各种函数的调用。其中各功能模块用菜单方式选择;另外,部分菜单也可以写成函数。 ( 流程图如下图1 )
[程序]
void main()
{
void menu();
void function1();
void function2();
void function3();
void function4();
menu();
return;
}
( 图 1 )
2 各功能模块设计
(1)输入模块
信息输入时直接按顺序结构(如图2)输入: void input()
{ char ch;
n=0;
if((fp=fopen("song.txt","a"))==NULL) {
printf("can?t open file song.txt"); exit(0);
}
printf("Please input a record:");
for(n=0;n<=50;)
{
printf("\nrecord %d:\n歌名:",n+1); gets(song[n].name);
printf("\n时间:");
gets(song[n].year);
printf("\n作者:");
gets(song[n].author);
printf("\n歌手:");
gets(song[n].singer);
n++;
printf("继续输入吗, (y/n)\n"); ch=getchar();getchar();
if(ch==„n?)
break;
}
fwrite(song,sizeof(song[0]),n,fp); fclose(fp);
}
( 图 2)
2 删除模块:
用户输入要删除的信息,如输入歌曲名 ,根据歌曲名找到其他
并删除。
[程序]
/******************删除模块*************************/
void del()
{
int m,k=0;
long a;
char namekey[8];
printf("\n请输入您要删除的歌曲名:");
scanf("%s",namekey);
if((fp=fopen("song.txt","r+"))==NULL)
{
printf("\n不能打开该文件~");
exit(0);
}
while(!feof(fp))
{
a=ftell(fp);
fscanf(fp,"%6s %5s %5s %10s\n",song[n].name,song[n].year,song[n].author,song[n]
.singer);
if(strcmp(namekey,song[n].name)==0)
{
k=1;
break;
}
}
if(k==1)
{
printf("\n已查到,记录为");
printf("\n%6s %5s %5s %10s\n",song[n].name,song[n].year,song[n].author,song[n].
singer);
printf("\n确实要删除,按1;不删除,按0:");
scanf("%d",&m);
if(m==1)
{
fseek(fp,a,0);
fprintf(fp,"%s %s %s %s\n"," " ," ","
"," ");
}
}
else
printf("\n对不起,查无此人。");
fclose(fp);
}
3?浏览模块:
在用户按下菜单后直接显示出所有歌曲信息。
void xianshi()
{ n=0;
if((fp=fopen("song.txt","rb"))==NULL)
{
printf("can?t open the file song.txt");
exit(0);
}
printf(" 歌名\t 作者\t 歌手 时间 \n");
while(fread(&song[n],sizeof(song[n]),1,fp)==1)
{
printf("%6s %5s %10s %5s\n",song[n].name,song[n].author,song[n].singer,song[n
].year);
n++;
}
fclose(fp);
}
4?查找模块:
用户输入要查找的歌曲名或歌曲的任意信息,按菜单键。void searchname() {
int a=0; char ch; n=0;
if((fp=fopen("song.txt","rb"))==NULL)
{
printf("can not open the file.\n ");
exit(0);
}
while(fread(&song[n],sizeof(song[n]),1,fp)==1)
n++;
a=n;
printf("用什么方式查询?\n");
printf("1.歌名 2.时间 3.歌手\n");
ch=getchar();getchar();
switch(ch)
{
case „1?:
printf(" 输入你要查的歌名:\n");
gets(numstr);
for(n=0;n<a;)
{
if(!strcmp(numstr,song[n].name))
break;
n++;
}
break;
case „2?:
printf("输入你要查的歌曲时间\n");
gets(numstr);
for(n=0;n<a;)
{
if(atol(numstr)==song[n].year)
break;
n++;
}
break;
case „3?:
printf("输入你要查的歌手\n");
gets(numstr);
for(n=0;n<a;)
{
if(!strcmp(numstr,song[n].singer))
break;
n++;
}
break;
}
printf(" 歌名 作者 歌手 时间 \n");
printf("%6s %5s %5s %10s\n",song[n].name,song[n].year,song[n].author,song[n].si
nger);
fclose(fp);
}
流程图如下图(图3)
5?公共函数
2 各种被调函数
(1)insert函数:数据的插入,用于个人的信息的补录,包括姓名、工作单位、电话号码和email地址。
(2)del函数:用于通讯录中个人信息的删除。
(3)change函数:用于通讯录中个人信息的修改,输入人名,对人名所对应的机构体内容进行修改(包括姓名、工作单位、电话号码和email信息)。
(4)searchname函数:用于输入姓名查找个人信息。如果通讯录中没有此人信息,显示“查无此人~”。
(5)searchnum函数:用于输入电话号码查询个人信息。如果通讯录中没此人信息,显示“查无此人~”。
(6)show函数:用于个人全部信息的显示。
(7)income函数:用于所有原始个人信息的录入(包括姓名、电话号码、工作单位和email地址)。
五 上机操作
1(
主菜单函数
2( 编辑模块
3(替换模块
4查找模块(
5(修改模块
6(删除模块
7(保存模块
8(退出模块
学 习 心 得
通过此次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)
{ } for(j=0;j<i;j++) { } while(1) { printf("Please input the
author:\n"); scanf("%s",dan[i].author); printf("Please input the song?s
name:\n"); fwrite(&dan[j],sizeof(struct system),1,fp); printf("Can not open
the file!\n"); exit(0);
}
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++) { } v=j; for(j=0;j<v;j++) { } fclose(fp); if(strcmp(w,dan[j].name)==0) c=j; if(fread(&dan[j],sizeof(struct system),1,fp)!=1) break; 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) { } else break; 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");
}
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(flag==0) printf("Cannot find the song!\n"); 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; 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(flag==0) printf("Cannot find the song!\n"); 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; fclose(fp); else printf("Error!\n");
main()
{
while(1) { int a;
printf("\t\tot;);
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) MENU
} } { case 1:enter();break; case 2:delete();break; case 3:browse();break; case 4:search();break; }