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