问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求助:用C语言制作一个歌曲信息管理系统

发布网友 发布时间:2022-05-26 04:43

我来回答

3个回答

热心网友 时间:2024-10-30 02:39

30 分太少了.高点,这要花好多时间呢,又没有现成的.

己成功运行,排序是根据歌曲名排的。

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "ctype.h"
#define M 50 /*定义常数表示记录数*/

typedef struct /*定义数据结构*/
{ char songname[20];/*歌曲名*/
char name[20]; /*作者*/
char singer[20]; /*演唱者*/
char year[20]; /*年月日*/
}SONG;
/******以下是函数原型*******/
int enter(SONG t[]); /*输入记录*/
void list(SONG t[],int n); /*显示记录*/
void search(SONG t[],int n); /*查找显示记录*/
int delete(SONG t[],int n); /*删除记录*/
int add(SONG t[],int n); /*插入记录*/
void save(SONG t[],int n); /*记录保存为文件*/
int load(SONG t[]); /*从文件中读记录*/
void display(SONG t[]); /*按序号查找显示记录*/
void sort(SONG t[],int n); /*按姓名排序*/
void qseek(SONG t[],int n); /*快速查找记录*/

void print(SONG temp); /*显示单条记录*/
int find(SONG t[],int n,char *s,char ch) ; /*查找函数*/
int menu_select(); /*主菜单函数*/
/******主函数开始*******/
main()
{
int i;
SONG adr[M]; /*定义结构体数组*/
int length; /*保存记录长度*/
clrscr(); /*清屏*/
for(;;)/*无限循环*/
{
switch(menu_select()) /*调用主菜单函数,返回值整数作开关语句的条件*/
{
case 0:exit(0); /*如返回值为0则程序结束*/
case 1:length=enter(adr);break;/*输入记录*/
case 2:list(adr,length);break; /*显示全部记录*/
case 3:search(adr,length);break; /*查找记录*/
case 4:length=delete(adr,length);break; /*删除记录*/
case 5:length=add(adr,length); break; /*插入记录*/
case 6:save(adr,length);break; /*保存文件*/
case 7:length=load(adr); break; /*读文件*/
case 8:display(adr);break; /*按序号显示记录*/
case 9:sort(adr,length);break; /*快速查找记录*/

}

printf("i=%d",length);
getch();

}
}
/*菜单函数,函数返回值为整数,代表所选的菜单项*/
int menu_select()
{
char s[3];
int c;
clrscr(); /*清屏*/

/*读入任意字符*/

printf("\n\n\n\n\n");
printf("********************MENU*********************\n\n");
printf(" 1. Enter record\n");
printf(" 2. List the file\n");
printf(" 3. Search record on name\n");
printf(" 4. Delete a record\n");
printf(" 5. add record \n");
printf(" 6. Save the file\n");
printf(" 7. Load the file\n");
printf(" 8. display record on order\n");
printf(" 9. sort record by songname\n");
printf(" 0. Quit\n");
printf("***********************************************\n");
do{
printf("\n Enter you choice(0-9):"); /*提示输入选项*/
gets(s); /*输入选择项*/
c=atoi(s); /*将输入的字符串转化为整型数*/
}while(c<0||c>9); /*选择项不在0~9之间重输*/
return c; /*返回选择项,主程序根据该数调用相应的函数*/
}
/***输入记录,形参为结构体数组,函数值返回类型为整型表示记录长度*/
int enter(SONG t[])
{
int i;
char *s;

clrscr();
for(i=0;i<M;i++)
{
printf("\nplease input record or \n direct press q to exit with songname\n\n"); /*提示输入记录*/
printf("\nEnter songname: ");
gets(t[i].songname);
if(t[i].songname[0]=='q'&&t[i].songname[1]=='\0')
break;
printf("\nEnter name: ");
gets(t[i].name);
printf("\nEnter singer: ");
gets(t[i].singer);
printf("\nEnter year: ");
gets(t[i].year);

clrscr();
printf("\n Songname name singer Year_month\n");
printf("|---------------------------------------------------------------------------|\n");

printf("| %-16s| %-16s| %-16s| %-16s|\n",t[i].songname,t[i].name,t[i].singer,t[i].year);

printf("|---------------------------------------------------------------------------|\n");
}

return i; /*返回记录条数*/
}
/*显示记录,参数为记录数组和记录条数*/
void list(SONG t[],int n)
{
int i;
clrscr();
printf("\n\n***********************************ADDRESS*********************************\n");

printf("\n Songname name singer Year_month\n");
printf("|---------------------------------------------------------------------------|\n");

for(i=0;i<n;i++) {

printf("| %-16s| %-16s| %-16s| %-16s|\n",t[i].songname,t[i].name,t[i].singer,t[i].year);

printf("|---------------------------------------------------------------------------|\n");

if((i+1)%10==0) /*判断输出是否达到10条记录*/
{
printf("Press any key continue...\n"); /*提示信息*/
getch(); /*压任意键继续*/
}
}
printf("\n\n************************************END***********************************\n");

getch();
}
/*查找记录*/
void search(SONG t[],int n)
{
char s[20]; /*保存待查找姓名字符串*/
int i; /*保存查找到结点的序号*/
char ch;
clrscr(); /*清屏*/
do{
printf("Search by:\n");
printf("\n 1.By songname");
printf("\n 2.By name");
printf("\n 3.By singer");
printf("\n 0.Return to menu\n");
ch=getche();
}while(ch<48||ch>51);
switch(ch){
case '0':
return;
case '1':
printf("please enter songname to search.\n");
break;
case '2':
printf("please enter name to search.\n");
break;
case '3':
printf("please enter songname to search.\n");
break;
}
gets(s);

i=find(t,n,s,ch); /*调用find函数,得到一个整数*/
if(i>n-1) /*如果整数i值大于n-1,说明没找到*/
printf("not found\n");
else
print(t[i]); /*找到,调用显示函数显示记录*/
printf("i=%d,n=%d",i,n);
getch();
}
/*显示指定的一条记录*/
void print(SONG temp)
{
clrscr();
printf("\n\n*******************************************************************************\n");
printf("\n Songname name singer Year_month\n");
printf("|---------------------------------------------------------------------------|\n");

printf("| %-16s| %-16s| %-16s| %-16s|\n",temp.songname,temp.name,temp.singer,temp.year);

printf("|---------------------------------------------------------------------------|\n");
printf("\n\n\n***************************************END*************************************\n");

}
/*查找函数,参数为记录数组和记录条数以及姓名s */
int find(SONG t[],int n,char *s,char ch)
{
int i;
/*从第一条记录开始,直到最后一条*/

switch (ch){
case '1':
for(i=0;i<n;i++)
if(strcmp(s,t[i].songname)==0)
return i;
break;
case '2':
for(i=0;i<n;i++)
if(strcmp(s,t[i].name)==0)

return i;
break;
case '3':
for(i=0;i<n;i++)
if(strcmp(s,t[i].singer)==0)

return i;
break;
}
return i;
}

/*删除函数,参数为记录数组和记录条数*/
int delete(SONG t[],int n)
{

char s[20]; /*保存待查找姓名字符串*/
int i,j; /*保存查找到结点的序号*/
char ch;
clrscr(); /*清屏*/
do{
printf("\nDelete by:\n");
printf("\n 1.By songname");
printf("\n 2.By name");
printf("\n 3.By singer");
printf("\n 0.Return to menu\n");
ch=getche();
}while(ch<48||ch>51);
switch(ch){
case '0':
return 0;
case '1':
printf("\nplease enter songname to search: ");
break;
case '2':
printf("\nplease enter name to search: ");
break;
case '3':
printf("\nplease enter songname to search: ");
break;
}
gets(s);

i=find(t,n,s,ch); /*调用find函数*/
if(i>n-1) /*如果i>n-1超过了数组的长度*/
printf("no found not deleted\n"); /*显示没找到要删除的记录*/
else
{
print(t[i]); /*调用输出函数显示该条记录信息*/
printf("Are you sure delete it(y/n)\n"); /*确认是否要删除*/
ch=getche(); /*输入一个整数0或1*/
if(ch=='y'||ch=='Y') /*如果确认删除整数为1*/
{
for(j=i+1;j<n;j++) /*删除该记录,实际后续记录前移*/
{
strcpy(t[j-1].songname,t[j].songname); /*将后一条记录的姓名拷贝到前一条*/
strcpy(t[j-1].name,t[j].name);
strcpy(t[j-1].singer,t[j].singer);
strcpy(t[j-1].year,t[j].year);

}
n--; /*记录数减1*/
}
}
return n; /*返回记录数*/
}

/*保存函数,参数为结构体数组和记录数*/
void save(SONG t[],int n)
{
int i;
FILE *fp; /*指向文件的指针*/
if((fp=fopen("record.txt","wb"))==NULL) /*打开文件,并判断打开是否正常*/
{
printf("can not open file\n");/*没打开*/
exit(1); /*退出*/
}
printf("\nSaving file\n"); /*输出提示信息*/

for(i=0;i<n;i++)
{
fprintf(fp,"%-20s%-20s%-20s%-20s",t[i].songname,t[i].name,t[i].singer,t[i].year);/*格式写入记录*/
fprintf(fp,"\r\n"); /*将换行符号写入文件*/
}
fclose(fp);/*关闭文件*/
printf("****save success***\n"); /*显示保存成功*/
}

/*读入函数,参数为结构体数组*/
int load(SONG t[])
{
int i,n;
FILE *fp; /*指向文件的指针*/
if((fp=fopen("record.txt","rb"))==NULL)/*打开文件*/
{
printf("can not open file\n"); /*不能打开*/
exit(1); /*退出*/
}
fscanf(fp,"%d",&n); /*读入记录数*/
for(i=0;i<n;i++)
fscanf(fp,"%-20s%-20s%-20s%-20s",t[i].songname,t[i].name,t[i].singer,t[i].year);/*按格式读入记录*/
fclose(fp); /*关闭文件*/
printf("You have success read data from file!!!\n"); /*显示保存成功*/
return n; /*返回记录数*/
}
/*按序号显示记录函数*/
void display(SONG t[])
{
int id,n;
FILE *fp; /*指向文件的指针*/
if((fp=fopen("record.txt","rb"))==NULL) /*打开文件*/
{
printf("can not open file\n"); /*不能打开文件*/
exit(1); /*退出*/
}
printf("Enter order number...\n"); /*显示信息*/
scanf("%d",&id); /*输入序号*/
fscanf(fp,"%d",&n); /*从文件读入记录数*/
if(id>=0&&id<n) /*判断序号是否在记录范围内*/
{
fseek(fp,(id-1)*sizeof(SONG),1); /*移动文件指针到该记录位置*/
print(t[id]); /*调用输出函数显示该记录*/
printf("\r\n");
}
else
printf("no %d number record!!!\n ",id); /*如果序号不合理显示信息*/
fclose(fp); /*关闭文件*/
}

int add(SONG t[],int n)
{
SONG temp; /*新插入记录信息*/
int i,j;
char s[20]; /*确定插入在哪个记录之前*/

printf("\nplease input record or \n direct press q to exit with songname\n\n"); /*提示输入记录*/
printf("\nEnter songname: ");
gets(temp.songname);
if(temp.songname[0]=='q'&&temp.songname[1]=='\0')
return n;
printf("\nEnter name: ");
gets(temp.name);
printf("\nEnter singer: ");
gets(temp.singer);
printf("\nEnter year: ");
gets(temp.year);

clrscr();

printf("\n Songname name singer Year_month\n");
printf("|---------------------------------------------------------------------------|\n");

printf("| %-16s| %-16s| %-16s| %-16s|\n",temp.songname,temp.name,temp.singer,temp.year);

printf("|---------------------------------------------------------------------------|\n");

printf("please input locate name \n");
gets(s); /*输入插入位置的姓名*/
i=find(t,n,s,'1'); /*调用find,确定插入位置*/
for(j=n-1;j>=i;j--) /*从最后一个结点开始向后移动一条*/
{
strcpy(t[j+1].songname,t[j].songname);
strcpy(t[j+1].name,t[j].name);
strcpy(t[j+1].singer,t[j].singer);
strcpy(t[j+1].year,t[j].year);
}
strcpy(t[i].songname,temp.songname);
strcpy(t[i].name,temp.name);
strcpy(t[i].singer,temp.singer);
strcpy(t[i].year,temp.year);
n++; /*记录数加1*/
return n; /*返回记录数*/
}

/*排序函数,参数为结构体数组和记录数*/
void sort(SONG t[],int n)
{
int i,j,flag;
SONG temp; /*临时变量做交换数据用*/
for(i=0;i<n;i++)
{
flag=0; /*设标志判断是否发生过交换*/
for(j=0;j<n-1;j++)
if((strcmp(t[j].songname,t[j+1].songname))>0) /*比较大小*/
{
flag=1;
strcpy(temp.songname,t[j].songname);
strcpy(temp.name,t[j].name); /*交换记录*/
strcpy(temp.singer,t[j].singer);
strcpy(temp.year,t[j].year);
strcpy(t[j].songname,t[j+1].songname);
strcpy(t[j].name,t[j+1].name);
strcpy(t[j].singer,t[j+1].singer);
strcpy(t[j].year,t[j+1].year);
strcpy(t[j+1].songname,temp.songname);
strcpy(t[j+1].name,temp.name);
strcpy(t[j+1].singer,temp.singer);
strcpy(t[j+1].year,temp.year);
}
if(flag==0)break; /*如果标志为0,说明没有发生过交换循环结束*/
}
printf("sort sucess!!!\n"); /*显示排序成功*/
}

热心网友 时间:2024-10-30 02:39

这个作业题。。我想你有学了C的话,一定可以做出来的。。我不会帮做作业题的

热心网友 时间:2024-10-30 02:40

用struct做吧
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
抖音弹幕怎么关掉?怎么关闭抖音弹幕? 惠普LaserJet P3005D是否支持B5纸的双面打印? word打印出图片总是缺一部分怎么办-word打印图片不完整怎么解决_百度... 理想one哪里产的车辆? 抚州抚州ONE在哪里? one地址在哪里? 如何在图片上写字(如何在图片上添加文字) 网商贷为什么钱没到账 高级经济师职称怎么评 高级经济师需要评审吗 p2p被定性为非法吸收公众存款案,当时投资的收益会被公安追缴吗?! ...电信诈骗的参与人?” 因为社会上流传:非法吸收公众存款的存款公众... 异地违章必须要去当地处理违章吗 非法集资怎么界定 非法集资协助人定性 非吸和诈骗两种定性对受害者有何不同? 已定性为非法吸收公众存款罪,还需受害者个人去报案吗? ...必须去异地处理?还是可以回本地处理?必须本人去吗? 平台自融扩张定性非法集资会拍卖清算还给投资者吗 我想问一下我的投的项目现在定性为非法集资和传销了额, 谁提出了班级授课制 谁提出了班级授课制 非法集资的参与人是受害人吗?有没有返款的可能性? 非法集资的投资人是受害人吗? 员工流动性太大了,该怎么管理现在的90后员工 首都经贸大学 劳动经济学 研究生 专业课考什么 请问首都经贸研究生院的社会保障专业好考不?复习资料从哪里获取?有没有... 首都经济贸易大学保险专业考研专业课考试大纲什么时候会出呢?有针对... 首都经济贸易大学管理科学与工程考研专业课考试大纲什么时候会出呢?有... 首都经贸大学的法学研究生要考哪些科目 非吸业务员自己有投资怎么算 求C语言编制一个歌曲信息管理系统 经他人介绍参与非法集资并介绍其他2人参与的,会构成怎样的犯罪?如何处 ... 用C语言制作一个歌曲信息管理系统。我刚学的。。不要太复杂,,可以运行... 求用C语言编写一个歌曲信息管理系统,急! 求一个歌曲信息管理系统c语言的源代码,一定要亲测可以运行的,可以加 ... c语言程序设计题 跪求高人的复杂版~ 慢不要紧 主要是要对~ 如何在C语言中添加音乐 C语言课程设计 歌手比赛系统怎么写 急求c语言程序设计 成绩管理系统不要c++的 餐厅用的保鲜柜最低温度零下几度? 成为wish诚信店铺,卖家有哪些好处? 怎样在百度上发布消息,人人都能看得到。 谁会在百度发布消息?如何在百度发布消息,让别人看到啊? 保鲜柜温度调节多少度最凉 怎么在百度里发消息让别人看到? 风冷保鲜柜,最低多少度? 冰箱保鲜最低温度 怎样在百度里发布消息,所有人都还容易搜到 求高一学期末个人总结