学生信息管理系统-----C语言

学生信息管理系统-----C语言,第1张

这只是一个简单的版本,还有待于后续更新。

具有以下几个功能:

1.读取文件获取学生信息(特定文件)

2.添加学生信息

3.修改学生信息

4.删除学生信息

5.查找学生信息

6.对学生按成绩进行排序

7.输出所有学生的信息

8.保存学生信息到指定文件

创建学生信息与链表更新

typedef struct Student
{
    char name[100];                                         //姓名  
    char number[100];                                       //学号  
    char sex[10];                                           //性别 
    int age;                                                //年龄  
    int score;                                              //成绩  
    int telephone[100]                                      //手机号
    char place[100]                                         //地址
}stu;
typedef struct LN
{
    stu data;
    struct LN* next;
}Link;
 
void Insert(Link* L, Link* p)                               //插入新的节点  
{
    Link* q = L;
    p->next = q->next;
    q->next = p;
}

​

 载入界面,退出界面,菜单

void gotoxy(int i, int j)       //移动光标
{
    COORD position = { i,j };
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), position);
}

void welocome()                                             //登陆界面  
{
    system("color b1");
    printf("\t         ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★\n");
    printf("\t         ★                                                                         ★\n");                                   
    printf("\t         ★                                                                         ★\n");                                   
    printf("\t         ★                                                                         ★\n");                                   
    printf("\t         ★                        欢迎访问学生信息管理系统!                        ★\n");                                   
    printf("\t         ★                                                                         ★\n");
    printf("\t         ★                                                                         ★\n");
    printf("\t         ★                                                                         ★\n");
    printf("\t         ★                                                                         ★\n");
    printf("\t         ★                                                                         ★\n");
    printf("\t         ★                                                                         ★\n");
    printf("\t         ★                                                                         ★\n");
    printf("\t         ★                                                                         ★\n");
    printf("\t         ★                                                                         ★\n");
    printf("\t         ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★\n\n");
    int i, m;
    CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };
    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
    gotoxy(46, 7);
    printf("   Loading......\n");
    for (i = 10, m = 1; i < 60; i++, m += 2)
    {
        gotoxy(82, 10);
        printf("    ");
        gotoxy(82, 10);
        printf("%-2d%%", m);
        gotoxy(82, 10);
        printf("    ");
        gotoxy(82, 10);
        printf("%-2d%%", m + 1);
        gotoxy(i + 20, 10);
        printf("》");
        Sleep(i + m);
    }
}

void tail()                                                 //退出界面
{
    system("color b1");
	printf("\n\t                         ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★\n\n");
	puts("\t                           |                                               |");
	puts("\t                           |                                               |");
	puts("\t                           |           感谢访问学生信息管理系统!           |");
	puts("\t                           |                                               |");
	puts("\t                           |                                               |");
	puts("\n ");
    
}

void menu()                                                 //功能菜单  
{
    system("color f2");
    printf("\t                           ________________________________________________ \n");
    printf("\t                          |                                                |\n");
    printf("\t                          |                学生信息管理系统                |\n");
    printf("\t                          |                                                |\n");
    printf("\t                          |               1、增加学生信息                  |\n");
    printf("\t                          |               2、删除学生信息                  |\n");
    printf("\t                          |               3、修改学生信息                  |\n");
    printf("\t                          |               4、查找学生的信息                |\n");
    printf("\t                          |               5、按照学生成绩排序              |\n");
    printf("\t                          |               6、浏览全部学生信息              |\n");          
    printf("\t                          |               7、保存学生信息到文件            |\n");
    printf("\t                          |               0、退出系统                      |\n");
    printf("\t                          |                                                |\n");
    printf("\t                          |________________________________________________|\n");
    printf("请输入您要选择的功能键:");
}

 添加学生

void add(Link* L)                                           //增加新的学生  
{
    system("color f2");
    printf("请输入学生的信息:\n");
    printf("学号:");
    scanf("%s", number);
    Link* q = L->next;
    while (q != NULL)
    {
        if (strcmp(q->data.number, number) == 0)            //判断学生是否存在  
        {
            printf("该生已存在\n");
            break;
        }
        q = q->next;
    }
    if (q == NULL)
    {
        Link* p= (Link*)malloc(sizeof(Link));;
        p->next = NULL;
        strcpy(p->data.number, number);
        printf("姓名:");
        scanf("%s", name);
        strcpy(p->data.name, name);
        printf("性别:");
        scanf(" %s", sex);
        strcpy(p->data.sex, sex);
        printf("年龄:");
        scanf("%d", &age);
        p->data.age = age;
        printf("总成绩:");
        scanf("%d", &score);
        p->data.score = score;
        Insert(L, p);
    }
    printf("按任意键继续");
    getch();
    system("cls");
}

删除学生

void deletestu(Link* L)                                     //删除学生  
{
    system("color f2");
    printf("请输入您要删除的学生的学号:");
    scanf("%s", number); 
    Link* p, * pre;
    if (L->next == NULL)
    {
        printf("还没有学生信息,请增加学生信息\n");
        return;
    }
    pre = L;
    p = pre->next;
    int judge = 0;
    while (p)
    {
        if (strcmp(p->data.number, number) == 0)
        {
            judge = 1;
            pre->next = p->next;
            free(p);
            printf("删除学生成功\n");
            break;
        }
        pre = p;
        p = p->next;
    }
    if (judge == 0)
        printf("该生不存在\n");
    printf("按任意键继续");
    getch();
    system("cls");
}

修改学生信息

void change(Link* L)                                        //修改学生信息  
{
    int judge = 0, n = 0;
    char a = 0;
    system("color f2");
    printf("请输入您要修改学生的学号:");
    scanf("%s", number);
    Link* q = L->next;
    while (q != NULL)
    {
        if (strcmp(q->data.number, number) == 0)
        {
            judge = 1;
            do 
            {
                printf("请选择您要修改的信息: 1.姓名  2.学号  3.性别  4.年龄  5.总成绩  0.取消\n");
                loop: scanf("%d", &n);
                switch (n)
                {
                case 0:
                    break;
                case 1:
                    printf("请输入您要修改的姓名:");
                    scanf("%s", name);
                    printf("修改的姓名为:%s\n请确认是否修改[Y/N]", name);
                    getchar();
                    a = getchar();
                    if (a == 'y' || a == 'Y')
                    {
                        strcpy(q->data.name, name);
                        printf("修改成功!\n");
                    }
                    else
                        printf("修改失败!\n");
                    break;
                case 2:
                    printf("请输入您要修改的学号:");
                    scanf("%s", number);
                    printf("修改的学号为:%s\n请确认是否修改[Y/N]", number);
                    getchar();
                    a = getchar();
                    if (a == 'y' || a == 'Y')
                    {
                        strcpy(q->data.number, number);
                        printf("修改成功!\n");
                    }
                    else
                        printf("修改失败!\n");
                    break;
                case 3:
                    printf("请输入您要修改的性别:");
                    scanf("%s", sex);
                    printf("修改的性别为:%s\n请确认是否修改[Y/N]", sex);
                    getchar();
                    a = getchar();
                    if (a == 'y' || a == 'Y')
                    {
                        strcpy(q->data.sex, sex);
                        printf("修改成功!\n");
                    }
                    else
                        printf("修改失败!\n");
                    break;
                case 4:
                    printf("请输入您要修改的年龄:");
                    scanf("%d", &age);
                    printf("修改的年龄为:%d\n请确认是否修改[Y/N]", age);
                    getchar();
                    a = getchar();
                    if (a == 'y' || a == 'Y')
                    {
                        strcpy(q->data.age, age);
                        printf("修改成功!\n");
                    }
                    else
                        printf("修改失败!\n");
                    break;
                case 5:
                    printf("请输入您要修改的总成绩");
                    scanf("%d", &score);
                    printf("修改的总成绩为:%d\n请确认是否修改[Y/N]", score);
                    getchar();
                    a = getchar();
                    if (a == 'y' || a == 'Y')
                    {
                        strcpy(q->data.score, score);
                        printf("修改成功!\n");
                    }
                    else
                        printf("修改失败!\n");
                    break;
                default:
                    printf("请输入正确的选项\n");
                    goto loop;
                    break;
                }
                printf("是否继续修改\n按任意键继续修改  按0退出\n");
                n = getch()-48;
            } while (n);
        }
        q = q->next;
    }
    if (judge == 0)
    {
        printf("该生不存在\n");
    }
    system("cls");
}

查找学生

void find(Link* L)                                          //查找学生 
{
    int flag;
    system("color b1");
    printf("1.按学号查询:\n");
    printf("2.按姓名查询:\n");
    printf("请输入查询方式:");
    scanf("%d", &flag);
    if (flag == 1) 
    {
        printf("请输入该生学号:");
        scanf("%s", number); 
        Link* q = L->next;
        while (q != NULL)
        {
            if (strcmp(q->data.number, number) == 0)
            {
                printf("姓名:%s\n", q->data.name);
                printf("学号:%s\n", q->data.number);
                printf("性别:%s\n", q->data.sex);
                printf("年龄:%d\n", q->data.age);
                printf("总成绩:%d\n", q->data.score);
                break;
            }
            q = q->next;
        }
        if (q == NULL)
            printf("该生不存在\n");
    }
    else {
        printf("请输入该生姓名:");
        scanf("%s", name);
        Link* q = L->next;
        while (q != NULL)
        {
            if (strcmp(q->data.name, name) == 0)
            {
                printf("姓名:%s\n", q->data.name);
                printf("学号:%s\n", q->data.number);
                printf("性别:%c\n", q->data.sex);
                printf("年龄:%d\n", q->data.age);
                printf("总成绩:%d\n", q->data.score);
                break;
            }
            q = q->next;
        }
        if (q == NULL)
            printf("该生不存在\n");
    }
    getchar();
    printf("按任意键继续");
    getch();
    system("cls");
}

 浏览全部学生信息

void display(Link* L)                                       //浏览全部学生信息  
{
    Link* q = L->next;
    if (q == NULL)
    {
        printf("还没有学生信息,请增加学生信息\n");
        return;
    }
    while (q)
    {
        system("color f2");
        printf(" 学号:%s 姓名:%s 性别:%s 年龄:%d  总成绩:%d \n", q->data.number, q->data.name, 
            q->data.sex, q->data.age,q->data.score);
        q = q->next;
    }
    printf("按任意键继续");
    getch();
    system("cls");
}

排序

void sort(Link* L)                                         //按成绩排序排序 并输出排序后的结果  
{
    system("color f2");
    Link* q, * p, * r = L->next; 
    if (r == NULL)
    {
        printf("还没有学生信息,请增加学生信息\n");
        return;
    }
    while (r)   
    {
        p = r;
        q = r->next;
        Link* tp= (Link*)malloc(sizeof(Link));              //用于排序时暂存数据  
        tp->next = NULL;;
        while (q)
        {
            if (q->data.score > p->data.score)
            {
                //复制q结点信息到tp
                strcpy(tp->data.number, q->data.number);
                strcpy(tp->data.name, q->data.name);
                strcpy(tp->data.sex, q->data.sex);
                tp->data.age = q->data.age;
                tp->data.score = q->data.score;
                //复制p结点信息到q
                strcpy(q->data.number, p->data.number);
                strcpy(q->data.name, p->data.name);
                strcpy(q->data.sex, p->data.sex);
                q->data.age = p->data.age;
                q->data.score = p->data.score;
                //复制tp结点信息到p
                strcpy(p->data.number, tp->data.number);
                strcpy(p->data.name, tp->data.name);
                strcpy(p->data.sex, tp->data.sex);
                p->data.age = tp->data.age;
                p->data.score = tp->data.score;
            }
            q = q->next;
        }
        r = r->next;
    }

    printf("排序后的学生信息是:\n");
    display(L);
}

读取文件与保存文件

void readfile(Link* L)                                      //读取文件内容
{
    FILE* fp;
    fp = fopen("student.txt", "rb");                        //打开文件 
    if (fp == NULL)
    {
        printf("文件不存在\n");
        return;
    }
    else
    {
        printf("已获取文件内容\n");
    }
    int i = 0;
    while (!feof(fp))
    { 
        fscanf(fp, " %s %s %s %d %d", number, name, sex, &age, &score);
        i++;
    }
    fclose(fp);
    
    FILE* FP;
    FP = fopen("student.txt", "rb");                        //打开文件
    int b = i - 1, j = 1;
    while (!feof(FP))
    {
        fscanf(FP, "%s %s %s %d %d", number, name, sex, &age, &score);
        Link* n = (Link*)malloc(sizeof(Link));
        n->next = NULL;
        strcpy(n->data.number, number); 
        strcpy(n->data.name, name);
        strcpy(n->data.sex, sex);
        n->data.age = age;
        n->data.score = score;
        Insert(L, n);                                       //插入新的节点  
        if (j == b)
            break;
        j++;
    }
    fclose(FP);                                             //关闭文件  
}


void save(Link* L)                                          //保存学生信息到文件  
{
    FILE* fp;
    Link* p = L->next;
    int judge = 0;
    if ((fp = fopen("student.txt", "w")) == NULL)           //打开文件
    {
        printf("不能打开此文件!\n");
        return;
    }
    while (p)
    {
        fprintf(fp, "%s  %s  %s  %d  %d  \n", p->data.number, p->data.name, p->data.sex, p->data.age, p->data.score);
        p = p->next;
    }
    printf("保存成功\n");
    fclose(fp);
    getchar();
    printf("按任意键继续");
    getch();
    system("cls");
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1329837.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-12
下一篇 2022-06-12

发表评论

登录后才能评论

评论列表(0条)

保存