C语言课程设计 学生信息管理系统 (简单版)


(比较简单,建议非计算机专业参考)

需求

  • 1.主菜单界面
    菜单选项框尺寸16X8
  • 2.增加功能
    (1)用户输入的添加学生数量不能小于0,也不能超过列表剩余容量。
    (2)用户输入的学号必须是唯一的,否则要提示用户重新输入。
  • 3.查询功能
    按照学生的学号进行查照即可。
  • 4.修改功能
    (1)用户修改后的学号不能与已存在的学号重复,否则提示用户重新输入。
    (2)可以与当前修改的条目的学号相同(从结果来看就是没有对这一条记录的学号进行修改)。
  • 5.删除功能
    被删除了的条目之后的条目要按顺序上移以填充空位。
  • 6.输出功能
    (1)第一行提示数量的信息与上一行之间会有一个空行。
    (2)第一行提示数量的信息左右两边的*号都是6个。
    (3)第一行提示数量的信息格式是<”学号”,10格宽><2空格><”姓名”,16格宽><2空格><”成绩”,12格宽>
    (4)之后每一行学生信息的格式是<学号值,10格宽><姓名值,20格宽><成绩值,10格宽>。
  • 7.退出功能
    “退出”即是程序退出。
  • 8.读取数据
    当程序运行数把文件从data.txt中读取出来,放入信息表中。

源代码

@月亮警察 哈哈

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


void XiuGai();          /*修改*/
void XianShi();         /*显示*/
void LuRu();            /*录入*/
void ShanChu();         /*删除*/
void GongNeng();        /*功能选择*/
void read_txt();        /*读入数据*/
void ChaXun();          /*查询*/
int number = 0;//计数
/******************学生结构体*****************/
typedef struct student
{
    char name[20] ;      /*姓名*/

    int id;             /*学号*/

    int score;           /*成绩*/

} typel;
typel stu[10];
/********************主函数*****************/
int main()
{
    while(1)
    {


        printf("+--------------+\n");
        printf("|  1. 增加功能 |\n");
        printf("|  2. 查询功能 |\n");
        printf("|  3. 修改功能 |\n");
        printf("|  4. 删除功能 |\n");
        printf("|  5. 输出功能 |\n");
        printf("|  0. 退出     |\n");
        printf("+--------------+\n");

        int a;
        printf("请选择服务,并输入对应数字:\n");
        scanf("%d",&a);
        if(a>5 || a< 0)
        {
            printf("输入有误!请重新输入...\n");//当输入不在0~5范围时。
            scanf("%d",&a);
        }

        switch(a)
        {
        case 1:

            printf("【增加功能】\n");
            LuRu();
            break;
        case 2:

            printf("【查询功能】\n");
            ChaXun();
            break;

        case 3:

            printf("【修改功能】\n");
            XiuGai();
            break;
        case 4:

            printf("【删除功能】\n");
            ShanChu();
            break;
        case 5:

            printf("【输出功能】\n");
            XianShi();
            break;

        case 0:

            printf("谢谢惠顾,O(∩_∩)O拜拜~\n");
            return 0;

        }
    }

    return 0;

}
/***************************从文件读入数据****************************/
void read_txt()
{
    /*从文件中读入数据*/

    FILE *file;                 //定义文件指针
    //file = fopen("step1/data.txt","r");//以只读的方式打开文件
    file = fopen("data.txt","r");
    int i = 0;
    while(1)
    {
        i++;
        fscanf(file,"%d %s %d",&stu[i].id,&stu[i].name,&stu[i].score);
        //printf("%d \n",i);
        if(i == 5 )
        {

            fclose(file);
            number = 5;
            break;
        }

    }
    return;
}
/***************************录入-【增加功能】****************************/
void LuRu()
{


    read_txt();

    printf("请输入录入学生的数量:");
    int n;
    //printf("001\n");
    scanf("%d",&n);

    if (n <= 0 || n > 10 - number)
    {
        printf("输入错误,或储存空间不足!\n");
    }
    else
    {


        while(number <= 10 && number-5 < n)/*录入学生信息*/
        {

            number++;

            int iid;
            printf("请输入第%d个学生的学号:", number-5 );
            scanf("%d",&iid);
            /*验证录入是否重复*/
            for(int k = 1; k < number ; k++)
            {
                //printf("- %d -",number);
                //printf("- %d -",k);
                if(iid == stu[k].id)
                {
                    printf("输入学号重复!重新输入!\n");
                    number--;
                    break;
                }
                else if(k == number-1)  //说明已经遍历所有数据,未重复
                {
                    stu[number].id = iid;

                    printf("请输入第%d个学生的姓名:", number-5 );
                    scanf("%s",stu[number].name);

                    printf("请输入第%d个学生的成绩:", number-5 );
                    scanf("%d",&stu[number].score);
                    //printf("001");
                    break;

                }


            }




        }
    }

    printf("恭喜,录入学生成绩成功!\n");
    XianShi();


}
/******************成绩的删除*****************/
void ShanChu()
{
    int id;
    int i=1;
    printf("请输入要删除学生的学号:");
    scanf("%d",&id);
    for(i; i <= number; i++)                      /*检索学号*/
    {
        if(id == stu[i].id)
        {
            break;
        }
        if(i == number)                                 /*检索结束未找到信息*/
    {
        printf("未找到该学生【%s】成绩\n",id);
        return;
    }
    }

    for(int j=i; j <= number; j++)
    {
        stu[j]=stu[j+1];//把该学生后的数据向前移动1位
    }
    number--;//数据组总数减一
    XianShi();
    printf("删除成功!\n");


    return;
}
/******************显示成绩*****************/

void XianShi()
{
    printf("[>>>目前已有 %d 位学生的信息<<<] \n",number);
    printf("%10s  %16s  %12s\n", "学号", "姓名", "成绩");

    for(int k=1; k <= number; k++)
    {
        printf("%10d%20s%10d\n", stu[k].id, stu[k].name, stu[k].score);
    }
}
/******************成绩查询*****************/
void ChaXun()
{
    int iid;
    int p;
    printf("请输入要查询学生的学号:");
    scanf("%d",&iid);
    for(p=1; p <= number; p++)
    {
        if(iid == stu[p].id)
        {
            break;
        }
        if(p == number)
        {
            printf("【%s】成绩不存在\n",iid);

            return;
        }
    }

    printf(">>查询成功!\n");
    printf("%10s  %16s  %12s\n", "学号", "姓名", "成绩");
    printf("%10d  %20s  %10d\n", stu[p].id, stu[p].name, stu[p].score);
    return;
}
/*******************成绩修改******************/
void XiuGai()
{
    XianShi();
    int iid;
    int q;
    printf("请输入要修改学生的学号:");
    scanf("%d",&iid);
    for(q = 1; q <= number; q++)
    {
        if(iid == stu[q].id)
        {
            break;
        }
        if(q == number)
    {
        printf("未找到该学生【%d】成绩\n",iid);
        return;
    }
    }
    printf("请输入学号:");
    scanf("%d",&stu[q].id);
    printf("请输入姓名:");
    scanf("%s",&stu[q].name);
    printf("请输入成绩:");
    scanf("%d",&stu[q].score);
    XianShi();
    printf("修改成功!\n");




}



免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM