管理系统之KTV点歌系统

news/2024/11/8 0:42:37/

管理系统之KTV点歌系统

KTV点歌系统主要包括两部分,管理者界面和用户界面。管理者可以实现歌曲的录入,增加,删除,修改查找。而用户则可以实现歌曲的查找和将歌曲加入到歌单里以及删除或置顶。系统现在还不是很完整,只有管理者的功能被实现,具体代码如下

#include<stdio.h>
#include<stdlib.h> 
#include<string.h>
#include<conio.h>
typedef struct NODE
{  char name[50];char singer[40];char lyricist[40];char tunesmith[40];struct node *next;
}node,*linklist;
linklist h;linklist creat();                              //链表创建 
void add(linklist h);                          //歌曲增加 
void print(linklist h);                        //打印 
void screen();                                 //用户管理员选择界面 
void screen1();                                //用户界面 
void screen2();                                //管理者界面 
void screen3();                                //管理者查询歌曲界面 
void screen4();                                //管理者修改歌曲信息界面 
void screen5();                                //管理员删除歌曲界面 
void cut1(linklist h);                         //管理者删除某首歌曲
void cut2(linklist h);                         //管理者删除某个歌名对应的所有歌曲
void cut3(linklist h);                         //管理者删除某个演唱者对应的所有歌曲
void find1(linklist h);                        //按照歌名查询歌曲 
void find2(linklist h);                        //按照歌手查询歌曲 
void change_name(linklist h,char name[],char singer[],char lyricist[],char tunesmith[]);        //输入歌名歌手作词作曲修改歌名
void change_singer(linklist h,char name[],char singer[],char lyricist[],char tunesmith[]);      //输入歌名歌手作词作曲修改演唱者 
void change_lyricist(linklist h,char name[],char singer[],char lyricist[],char tunesmith[]);    //输入歌名歌手作词作曲修改作词者 
void change_tunesmith(linklist h,char name[],char singer[],char lyricist[],char tunesmith[]);   //输入歌名歌手作词作曲修改作曲者 #include"KTV.h"void screen2(){int x; printf("\n\t******************************欢迎使用KTV点歌系统*****************************\n\t");printf("*                                                                            *\n\t");printf("*       XXXXXXXXXXXXXXXXXXXXXX[1.歌曲信息录入    ]XXXXXXXXXXXXXXXXXXXX       *\n\t");printf("*       XXXXXXXXXXXXXXXXXXXXXX[2.歌曲增加        ]XXXXXXXXXXXXXXXXXXXX       *\n\t");printf("*       XXXXXXXXXXXXXXXXXXXXXX[3.歌曲删除        ]XXXXXXXXXXXXXXXXXXXX       *\n\t"); printf("*       XXXXXXXXXXXXXXXXXXXXXX[4.歌曲查询        ]XXXXXXXXXXXXXXXXXXXX       *\n\t"); printf("*       XXXXXXXXXXXXXXXXXXXXXX[5.歌曲信息修改    ]XXXXXXXXXXXXXXXXXXXX       *\n\t");printf("*       XXXXXXXXXXXXXXXXXXXXXX[6.歌曲总览        ]XXXXXXXXXXXXXXXXXXXX       *\n\t");printf("*       XXXXXXXXXXXXXXXXXXXXXX[7.退出            ]XXXXXXXXXXXXXXXXXXXX       *\n\t"); printf("*                                                                            *\n\t"); printf("******************************************************************************\n\t");printf("请输入1~6进行具体操作:");scanf("%d",&x);switch(x){case 1:h=creat();system("cls");print(h);screen2();break;case 2:system("cls");add(h);system("cls");print(h);screen2();break;case 3:system("cls");screen5();screen2();break; case 4:system("cls");screen3();break;case 5:system("cls");screen4();print(h);break;case 6:system("cls");print(h);break; case 7:system("cls");screen();break;default: system("cls");printf("您输入的序号有误,请重新输入!\n");screen2();}}void screen(){int x; printf("\n\t******************************欢迎使用KTV点歌系统*************************\n\t");printf("*                                                                        *\n\t"); printf("*                                                                        *\n\t");printf("*       XXXXXXXXXXXXXXXXXXXXXX[1.用户      ]XXXXXXXXXXXXXXXXXXXX         *\n\t");printf("*       XXXXXXXXXXXXXXXXXXXXXX[2.管理员    ]XXXXXXXXXXXXXXXXXXXX         *\n\t");printf("*                                                                        *\n\t"); printf("*                                                                        *\n\t");printf("**************************************************************************\n\t");printf("请输入1或2进行具体操作:");scanf("%d",&x);if(x==1){system("cls");screen1();}else{system("cls");screen2();}}linklist creat()                                   //创建链表 {int m,i;                                        //定义一个变量m,记录要创建的歌曲的数目 linklist p,q;                                     //h为不带头结点的链表的第一个节点 h=(linklist)malloc(sizeof(node)); h->next=NULL;                                    //将第一个空间的指针域设为NULL p=h;                                             //申请一个node大小的空间 p为遍历指针                                 printf("\t请输入要创建的歌曲的数目:");scanf("%d",&m);                                 for(i=1;i<=m;i++){printf("第%d首歌:\n\t",i);printf("请输入要录入歌曲的名字:");scanf("%s",p->name);printf("\n\t请输入录入歌曲的演唱者:");scanf("%s",p->singer);printf("\n\t请输入要录入歌曲的作词者:");scanf("%s",p->lyricist);printf("\n\t请输入要录入歌曲的作曲者:");scanf("%s",p->tunesmith);if(i!=m){q=(node *)malloc(sizeof(node));                //申请一个node大小的空间为q q->next=NULL;                                  //将q的指针域设为NULL p->next=q;                                     //将p和q连在一起 p=q;                                           //将p向后移 } }return h;                                          //返回该链表头结点 
} void add(linklist h)                                       //增加歌曲函数 {linklist n,p,q;                                        //定义一个linklist类型的变量m int i,a;p=(node *)malloc(sizeof(node));                                          //用n记录第二个节点 printf("\t请输入要创建的歌曲的数目:");scanf("%d",&a);                               for(i=1;i<=a;i++){printf("第%d首歌:\n\t",i);printf("请输入要录入歌曲的名字:");scanf("%s",p->name);printf("\n\t请输入录入歌曲的演唱者:");scanf("%s",p->singer);printf("\n\t请输入要录入歌曲的作词者:");scanf("%s",p->lyricist);printf("\n\t请输入要录入歌曲的作曲者:");scanf("%s",p->tunesmith);n=h->next;                                            //用n记录原链表的第二个节点h->next=p;                                           //将头节点和新节点连在一起 p->next=n;                                           //将新节点和原来的第二个节点链接组成一个新的链表 if(i!=a)p=(node *)malloc(sizeof(node));                      //申请一个node大小的空间为p            }
}void cut1(linklist h)                    //将某首歌删掉 
{int d;char chn[50];                        //定义一个char型的变量chnchar chs[40];char chl[40];char cht[40];linklist s,t,n;s=h;                                //将头节点赋给s printf("请输入要删除的歌的名字:");scanf("%s",chn);printf("请输入要删除的歌的演唱者:");scanf("%s",chs);printf("请输入要删除的歌的作词者:");scanf("%s",chl);printf("请输入要删除的歌的作曲者:");scanf("%s",cht);t=s;                                //给s赋初值以防strcmp(s->name,ch)==0时t->next没有值if(strcmp(s->name,chn)==0&&strcmp(s->singer,chs)==0&&strcmp(s->lyricist,chl)==0&&strcmp(s->tunesmith,cht)==0)           //如果if成立h=h->next,直接将第一个节点删除h=h->next;else                                //否则跳过第一个节点,开始判断第二个节点{s=s->next;while(strcmp(s->name,chn)!=0&&strcmp(s->singer,chs)!=0&&strcmp(s->lyricist,chl)!=0&&strcmp(s->tunesmith,cht)!=0&&s)      //从第二个开始遍历,判断是否与要删除的歌名一致,不一致就遍历 {t=s;s=s->next;}t->next=s->next;                           //如果一致就把t和s的下一个连接起来 }printf("还需要继续删除吗?\n继续删除回复1,退出回复2:");  scanf("%d",&d);if(d==1)cut1(h);elsescreen2(); 
}void cut2(linklist h)                                        //将某个歌名对应的所有歌曲删掉 
{int d;char chn[50];                        //定义一个char型的变量chnlinklist s,t,n;s=h;                                //将头节点赋给s printf("请输入要删除的歌的名字:");scanf("%s",chn);t=s;                                //给s赋初值以防strcmp(s->name,ch)==0时t->next没有值if(strcmp(s->name,chn)==0)           //如果if成立h=h->next,直接将第一个节点删除h=h->next;else                                //否则跳过第一个节点,开始判断第二个节点{s=s->next;while(strcmp(s->name,chn)!=0&&s)      //从第二个开始遍历,判断是否与要删除的歌名一致,不一致就遍历 {t=s;s=s->next;}t->next=s->next;                          //如果一致就把t和s的下一个连接起来 }printf("还需要继续删除吗?\n继续删除回复1,退出回复2:");  scanf("%d",&d);if(d==1)cut2(h);elsescreen2();
} 
void cut3(linklist h)                                        //将某个演唱者对应的所有歌曲删掉 
{int d;char chs[50];                        //定义一个char型的变量chs linklist s,t,n;s=h;                                //将头节点赋给s printf("请输入要删除的歌的名字:");scanf("%s",chs);t=s;                                //给s赋初值以防strcmp(s->s,ch)==0时t->next没有值if(strcmp(s->singer,chs)==0)           //如果if成立h=h->next,直接将第一个节点删除h=h->next;else                                //否则跳过第一个节点,开始判断第二个节点{s=s->next;while(strcmp(s->singer,chs)!=0&&s)      //从第二个开始遍历,判断是否与要删除的演唱者名一致,不一致就遍历 {t=s;s=s->next;}t->next=s->next;                          //如果一致就把t和s的下一个连接起来 }printf("还需要继续删除吗?\n继续删除回复1,退出回复2:");  scanf("%d",&d);if(d==1)cut3(h);elsescreen2();
} void find1(linklist h)                                   //通过歌名查询歌曲的信息 
{int s;linklist t=h;char a[50];                                                //定义一个整型变量为a,存储要查询的歌的名字 printf("\n\t请输入要查询的歌名:");scanf("%s",a);while(strcmp(t->name,a)==0&&t)                             //通过strcmp判断输入的名字和链表中的哪个节点的name值相等,相等就输出 {printf("\n\t歌名:%s\n\t",t->name);printf("演唱者:%s\n\t",t->singer);printf("作词:%s\n\t",t->lyricist);printf("作曲:%s\n\t",t->tunesmith);t=t->next; }printf("还需要继续查询吗?\n继续查询回复1,退出回复2:");scanf("%d",&s);if(s==1)screen3();elsescreen2(); }void find2(linklist h)                                        //按照歌手名查询 
{int s; linklist t=h;char a[40];                                              //定义一个整型变量为a,存储要查询的歌手的名字 printf("\n\t请输入要查询的歌手的名字:");scanf("%s",a);while(strcmp(t->singer,a)==0&&t)                         //通过strcmp判断输入的名字和链表中的哪个节点的singer值相等,相等就输出 {printf("\n\t歌名:%s\n\t",t->name);printf("演唱者:%s\n\t",t->singer);printf("作词:%s\n\t",t->lyricist);printf("作曲:%s\n\t",t->tunesmith);t=t->next;}printf("还需要继续查询吗?\n继续查询回复1,退出回复2:");scanf("%d",&s);if(s==1)screen3();elsescreen2(); } void change_name(linklist h,char name[],char singer[],char lyricist[],char tunesmith[])                                //修改歌名
{char s[50];int c;linklist r=h;printf("请输入修改后的歌名:");scanf("%s",s);while(strcmp(r->name,name)!=0&&strcmp(r->singer,name)!=0&&strcmp(r->lyricist,name)!=0&&strcmp(r->tunesmith,name)!=0&&r)                                //当遍历到的名字和输入要删除的名字不同 {r=r->next;                                                    //r向后移1个 }                                                      strcpy(r->name,s);                                                //更改要删除的歌曲的名字printf("还需要继续修改吗?\n继续修改回复1,退出回复2:");scanf("%d",&s);if(s==1)screen4();elsescreen2(); 
}void change_singer(linklist h,char name[],char singer[],char lyricist[],char tunesmith[])                                //修改演唱者 
{char s[50];linklist r=h;printf("请输入修改后的演唱者的名字:");scanf("%s",s);while(strcmp(r->name,name)!=0&&strcmp(r->singer,name)!=0&&strcmp(r->lyricist,name)!=0&&strcmp(r->tunesmith,name)!=0&&r)                                //当遍历到的名字和输入要删除的名字不同 {r=r->next;                                                    //r向后移1个 }                                                      strcpy(r->singer,s);                                                //更改要删除的演唱者的名字printf("还需要继续修改吗?\n继续修改回复1,退出回复2:");scanf("%d",&s);if(s==1)screen4();elsescreen2();  
}void change_lyricist(linklist h,char name[],char singer[],char lyricist[],char tunesmith[])                                //修改作词者 
{char s[50];linklist r=h;printf("请输入修改后的作词者的名字:");scanf("%s",s);while(strcmp(r->name,name)!=0&&strcmp(r->singer,name)!=0&&strcmp(r->lyricist,name)!=0&&strcmp(r->tunesmith,name)!=0&&r)                                //当遍历到的名字和输入要删除的名字不同 {r=r->next;                                                    //r向后移1个 }                                                      strcpy(r->lyricist,s);                                                //更改要删除的作词者的名字 printf("还需要继续修改吗?\n继续修改回复1,退出回复2:");scanf("%d",&s);if(s==1)screen4();elsescreen2(); 
}void change_tunesmith(linklist h,char name[],char singer[],char lyricist[],char tunesmith[])                                //修改作曲者 
{char s[50];linklist r=h;printf("请输入修改后的作曲者的名字:");scanf("%s",s);while(strcmp(r->name,name)!=0&&strcmp(r->singer,name)!=0&&strcmp(r->lyricist,name)!=0&&strcmp(r->tunesmith,name)!=0&&r)                                //当遍历到的名字和输入要删除的名字不同 {r=r->next;                                                    //r向后移1个 }                                                      strcpy(r->tunesmith,s);                                                //更改要删除的作曲者的名字printf("还需要继续修改吗?\n继续修改回复1,退出回复2:");scanf("%d",&s);if(s==1)screen4();elsescreen2(); 
}void print(linklist h){node *s;                                             //定义一个新变量ss=h;                                                 //将链表头结点赋给s while(s){printf("\n\t歌曲:%s\n\t",s->name);printf("演唱者:%s\n\t",s->singer);printf("作词:%s\n\t",s->lyricist);printf("作曲:%s\n\t",s->tunesmith);s=s->next;                                        //遍历 } } void screen1()
{int x; printf("\n\t******************************欢迎使用KTV点歌系统*************************\n\t");printf("*                                                                        *\n\t");printf("*       XXXXXXXXXXXXXXXXXXXXXX[1.歌手点歌    ]XXXXXXXXXXXXXXXXXXXX       *\n\t");printf("*       XXXXXXXXXXXXXXXXXXXXXX[2.歌名点歌    ]XXXXXXXXXXXXXXXXXXXX       *\n\t");printf("*       XXXXXXXXXXXXXXXXXXXXXX[3.最热歌曲    ]XXXXXXXXXXXXXXXXXXXX       *\n\t"); printf("*       XXXXXXXXXXXXXXXXXXXXXX[4.歌曲总览    ]XXXXXXXXXXXXXXXXXXXX       *\n\t"); printf("*       XXXXXXXXXXXXXXXXXXXXXX[5.退出        ]XXXXXXXXXXXXXXXXXXXX       *\n\t"); printf("*                                                                        *\n\t"); printf("**************************************************************************\n\t");printf("请输入1~4进行具体操作:");scanf("%d",&x);switch(x){case 4:system("cls");print(h);break; case 5:system("cls");screen();break;default: system("cls");printf("您输入的序号有误,请重新输入!\n");screen1();}}main()
{screen(); }


http://www.ppmy.cn/news/345460.html

相关文章

java模拟KTV点歌系统

上面的案例启示是对集合类的一个巩固&#xff0c;代码如下&#xff1a; package cn.csdn.ktv;import java.util.LinkedList; import java.util.Scanner;public class KTVDemo {public static void main(String[] args) {System.out.println("--------------欢迎来到点歌系…

音创服务器系统手动加歌,音创ktv点歌系统的教程

完美者(wmzhe.com)网站以软件下载为基础&#xff0c;改版后的网站对功能性板块进行扩充&#xff0c;以期能够解决用户在软件使用过程中遇见的所有问题。网站新增了“软件百科”、“锦囊妙技”等频道&#xff0c;可以更好地对用户的软件使用全周期进行更加专业地服务。 音创ktv点…

KTV点歌系统

/*模拟 KTV 点歌系统。用户可按歌名查找某首歌曲或按歌手名查找其所有歌曲&#xff0c;点歌后显示所点歌曲歌词。管理员可添加和删除歌曲&#xff0c;每个歌曲的歌词用一个单独的文件存储。*/ //该系统成功运行的前提是创建两个文件夹&#xff0c;1、sier 2、song //该系统成功…

简单的KTV点歌系统

import java.util.Scanner;public class markSystem { public static void main(String[] args) { int choose; Singer singernew Singer(); Scanner inputnew Scanner(System.in); System.out.println(""); System.out.println(" 欢迎使用歌手打…

KTV点歌系统数字点歌功能

大家好&#xff01;初来乍到&#xff0c;这是我在CSDN的第一篇文章&#xff0c;有写的不好的地方请大家及时指出&#xff0c;我会听取大家的建议&#xff0c;积极改正&#xff01; 最近在用winform学习的知识做KTV项目&#xff0c;要求有前台和后台管理系统&#xff0c;在做的…

如何用笔记本组建家庭点歌系统

有很多朋友希望用笔记本组建家庭点歌系统&#xff0c;具体方法是怎样的呢&#xff1f;下面&#xff0c;笔者手把手教你用笔记本组建家庭卡拉OK点歌系统。 一、安装点歌软件 二、接线 1&#xff09;视频线的连接 视频信号通过笔记本的“外接显示设备”接口输出到电视机。 笔记…

教你如何组建家庭卡拉OK系统

教你如何组建家庭卡拉 OK系统&#xff08;原创&#xff1a;K歌之王 &#xff09; 人们生活水平不断提高&#xff0c;工作之余休闲的项目也变得越来越丰富&#xff0c; 喜欢卡拉OK的朋友以前只有去歌厅消费&#xff0c;歌厅气氛虽然好&#xff0c;但毕竟卫生及安全方面还不是令…

【每日一题Day232】LC2699修改图中的边权 |最短路径

修改图中的边权【LC2699】 给你一个 n 个节点的 无向带权连通 图&#xff0c;节点编号为 0 到 n - 1 &#xff0c;再给你一个整数数组 edges &#xff0c;其中 edges[i] [ai, bi, wi] 表示节点 ai 和 bi 之间有一条边权为 wi 的边。 部分边的边权为 -1&#xff08;wi -1&…