点歌台管理系统c语言

点歌台管理系统
当今社会生活节奏快,压力大,需要唱唱歌来放松,现有一ktv点歌设备公司拟使用C话言开
发一款ktv点歌管理系统,功能包括但不限于如下:
1.该系统可以有管理员,管理员登录之后可以新增,删除,查找,修改歌曲的信息。2.该系统可以由管理员启动点歌模式,可以设置本次消费时长,可以延长本次消费时间3.客户可根据歌曲的风格,拼音首字母,歌手名字等相关信息进行点歌
4.已点歌曲列表可以进行歌曲置顶,删除等操作5.可以提供热歌榜,新歌榜等相关内容方便客户进行点歌6.所有的相关数据都应使用文件进行持文化保存

https://blog.csdn.net/qq_35960743/article/details/122408272

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 歌曲结构体
typedef struct Song {
    char name[100];
    char artist[100];
    char style[100];
    struct Song* next;
} Song;

// 歌曲列表结构体
typedef struct SongList {
    Song* head;
    int count;
} SongList;

// 初始化歌曲列表
SongList* initSongList() {
    SongList* list = (SongList*)malloc(sizeof(SongList));
    list->head = NULL;
    list->count = 0;
    return list;
}

// 添加歌曲
void addSong(SongList* list, const char* name, const char* artist, const char* style) {
    Song* song = (Song*)malloc(sizeof(Song));
    strcpy(song->name, name);
    strcpy(song->artist, artist);
    strcpy(song->style, style);
    song->next = NULL;

    if (list->head == NULL) {
        list->head = song;
    }
    else {
        Song* current = list->head;
        while (current->next != NULL) {
            current = current->next;
        }
        current->next = song;
    }

    list->count++;
}

// 删除歌曲
void deleteSong(SongList* list, const char* name) {
    if (list->head == NULL) {
        return;
    }

    if (strcmp(list->head->name, name) == 0) {
        Song* temp = list->head;
        list->head = list->head->next;
        free(temp);
        list->count--;
        return;
    }

    Song* current = list->head;
    while (current->next != NULL) {
        if (strcmp(current->next->name, name) == 0) {
            Song* temp = current->next;
            current->next = current->next->next;
            free(temp);
            list->count--;
            return;
        }
        current = current->next;
    }
}

// 查找歌曲
Song* findSong(SongList* list, const char* name) {
    Song* current = list->head;
    while (current != NULL) {
        if (strcmp(current->name, name) == 0) {
            return current;
        }
        current = current->next;
    }
    return NULL;
}

// 修改歌曲信息
void modifySong(Song* song, const char* name, const char* artist, const char* style) {
    strcpy(song->name, name);
    strcpy(song->artist, artist);
    strcpy(song->style, style);
}

// 显示歌曲列表
void displaySongList(SongList* list) {
    Song* current = list->head;
    printf("歌曲列表:\n");
    while (current != NULL) {
        printf("歌曲名称:%s\n", current->name);
        printf("歌手:%s\n", current->artist);
        printf("风格:%s\n", current->style);
        printf("-------------------\n");
        current = current->next;
    }
}

// 保存歌曲列表到文件
void saveSongListToFile(SongList* list, const char* filename) {
    FILE* file = fopen(filename, "w");
    if (file == NULL) {
        printf("无法打开文件\n");
        return;
    }

    Song* current = list->head;
    while (current != NULL) {
        fprintf(file, "%s,%s,%s\n", current->name, current->artist, current->style);
        current = current->next;
    }

    fclose(file);
    printf("歌曲列表保存成功\n");
}

// 从文件加载歌曲列表
SongList* loadSongListFromFile(const char* filename) {
    FILE* file = fopen(filename, "r");
    if (file == NULL) {
        printf("无法打开文件\n");
        return NULL;
    }

    SongList* list = initSongList();
    char line[300];
    while (fgets(line, sizeof(line), file)) {
        char* name = strtok(line, ",");
        char* artist = strtok(NULL, ",");
        char* style = strtok(NULL, "\n");
        addSong(list, name, artist, style);
    }

    fclose(file);
    printf("歌曲列表加载成功\n");
    return list;
}

int main() {
    SongList* songList = initSongList();
    char filename[100] = "songlist.txt";
    songList = loadSongListFromFile(filename);

    int choice;
    while (1) {
        printf("请选择操作:\n");
        printf("1. 添加歌曲\n");
        printf("2. 删除歌曲\n");
        printf("3. 查找歌曲\n");
        printf("4. 修改歌曲信息\n");
        printf("5. 显示歌曲列表\n");
        printf("6. 保存歌曲列表到文件\n");
        printf("0. 退出\n");
        scanf("%d", &choice);

        if (choice == 1) {
            char name[100], artist[100], style[100];
            printf("请输入歌曲名称:");
            scanf("%s", name);
            printf("请输入歌手:");
            scanf("%s", artist);
            printf("请输入风格:");
            scanf("%s", style);
            addSong(songList, name, artist, style);
            printf("歌曲添加成功\n");
        }
        else if (choice == 2) {
            char name[100];
            printf("请输入要删除的歌曲名称:");
            scanf("%s", name);
            deleteSong(songList, name);
            printf("歌曲删除成功\n");
        }
        else if (choice == 3) {
            char name[100];
            printf("请输入要查找的歌曲名称:");
            scanf("%s", name);
            Song* song = findSong(songList, name);
            if (song != NULL) {
                printf("歌曲名称:%s\n", song->name);
                printf("歌手:%s\n", song->artist);
                printf("风格:%s\n", song->style);
            }
            else {
                printf("未找到该歌曲\n");
            }
        }
        else if (choice == 4) {
            char name[100], artist[100], style[100];
            printf("请输入要修改的歌曲名称:");
            scanf("%s", name);
            Song* song = findSong(songList, name);
            if (song != NULL) {
                printf("请输入新的歌曲名称:");
                scanf("%s", name);
                printf("请输入新的歌手:");
                scanf("%s", artist);
                printf("请输入新的风格:");
                scanf("%s", style);
                modifySong(song, name, artist, style);
                printf("歌曲信息修改成功\n");
            }
            else {
                printf("未找到该歌曲\n");
            }
        }
        else if (choice == 5) {
            displaySongList(songList);
        }
        else if (choice == 6) {
            saveSongListToFile(songList, filename);
        }
        else if (choice == 0) {
            break;
        }
        else {
            printf("无效的选择\n");
        }
    }

    return 0;
}







最近怎么这么多C语言编程题,都还是稍微有点复杂度的,是不是期末课题作业啊?

https://blog.csdn.net/qq_35960743/article/details/125130464

项目四 KTV点歌系统
题目背景
⚫ 模拟一个KTV点歌系统
主界面参考
需要实现的功能
⚫ 管理员功能:
⚫ 管理员登录、退出,密码修
改等
⚫ 歌曲信息查询
⚫ 歌曲增加、修改、删除
⚫ 歌曲排行
⚫ 用户功能:
⚫ 点歌(歌星姓名,歌曲名等)
⚫ 查看已点歌曲
⚫ 歌曲置顶、删除、切歌等
⚫ 歌曲评分
管理员功能简介
管理员界面参考
管理员登录与注销
⚫ 需检查管理员ID和密码的正确性
(可以设定一个固定的ID和密码)
设定账号输入次数,比如失败三次,
自动锁定系统。密码修改时,需要
输入一次旧密码、两次新密码,若
两次新密码不一致,或新密码和旧
密码一样,则修改失败
歌曲信息查询
注意:在曲库中存在唯一一个
表示每首歌曲的信息,如:ID
歌曲状态0表示正在
播放,1表示未播放
歌曲信息的增加、删除和修改
⚫ 在系统中增加新的歌曲
⚫ 添加歌曲时,如果歌曲存在则添加失败;否则添加新的歌曲(序号递增,e.g. 7 + 1
→ 8)
⚫ 批量添加歌曲
⚫ 在系统中删除不需要的并且未在播放的歌曲(删除后对剩余歌曲按照当前顺序重新编号)
⚫ 歌曲排序,可以按照播放量或者用户评分或者其他方式对歌曲进行排
序
用户功能简介
用户界面参考
歌曲搜索
⚫ 用户点歌
⚫ 歌星点歌
⚫ 歌曲名点歌(歌曲拼音查找, 精确查找等)
(a)歌星点歌
(b)歌曲名点歌 (c)歌曲名点歌
查看已点歌曲
⚫ 查看已点歌曲
⚫ 歌曲评分
⚫ 歌曲置顶、移除、切歌等
附加说明
注意事项
⚫ 提供的文件列表(提供txt文件),txt中分隔符为\t以及\n。
⚫ 歌曲清单文件(系统中歌曲分页展示, 每页歌曲列表不超过10个)
⚫ 批量导入的歌曲清单文件
⚫ 管理员ID 不超过20个字符,只能由大小写字母或数字组成
⚫ 密码 不超过12个字符,必须同时包括大小写字母和数字,登陆时,应检查管理
员ID和密码格式
⚫ 用户评分:评分范围为1-5星,初始歌单所有歌曲评分默认为0
⚫ 禁用条目
⚫ 禁止使用其他编程语言,只能使用C/C++语言。
⚫ 禁止使用SQL或MySQL等数据库软件。
时间节点
⚫ 设计文档(满分30分):5月31日10点满分提交截止(作业提交功能开放,
以提交时间作为依据),要求和项目一、项目二一致。
⚫ 基本程序代码(满分100分):6月7日10点截止(作业提交功能开放,以提
交时间作为依据)
⚫ 完成管理员和用户的基本功能,并通过测试,可以获得70分。
⚫ 实现良好的展示界面,可以获得30分。
⚫ 实验报告(满分30分): 6月7日10点截止(作业提交功能开放,以提交时
间作为依据),要求和项目一、项目二一致。
⚫ 创新功能实现(满分40分):额外实现项目说明中没有列出的创新功能,1
个功能10分。创新功能必须在实验报告中说明体现。
————————————————
版权声明:本文为CSDN博主「_程序设计_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

查看更多项目功能和描述,以及程序代码下载