c语言课程设计之学生奖学金管理系统

c语言课程设计

课程设计目的

  1. 进一步掌握和利用 C 语言进行程设计的能力;
  2. 进一步理解和运用结构化程设计的思想和方法;
  3. 初步掌握开发一个小型实用系统的基本方法;
  4. 学会调试一个较长程序的基本方法;
  5. 学会利用流程图或 N-S 图表示算法;
  6. 掌握书写程设计开发文档的能力(书写课程设计报告)。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

随便写的一个c语言练手小Demo,基本完成了各个功能,虽然没有申请评优,但也拿了个良好(虽然才一个学分,嫌弃)。
一方面我写的这些代码没什么技术含量,另一方面这是第一次写超千行的代码,书写时也确实感受到自己打码的熟练度提升了不少。
所以也发篇博客记录一下,也以此鼓励一下自己。

课设题目:学生奖学金管理系统 什么奖学金都没涉及到😅​

管理员账户密码都是123456

跑的效果图如下
在这里插入图片描述
源代码打包:点我
提取码:4vyv

源代码如下

/***************************************
* @FileName: Keshe.c
* @Author: Makonike
* @Version: 1.8
* @Date: 2020-12-25
* @Email: 1694585033@qq.com
* @Description: 课设-->学生奖学金管理系统
***************************************/
/*************************************************
 @Function: // 函数名称
 @Description: // 函数功能、性能等的描述
 @Calls: // 被本函数调用的函数清单
 @CalledBy: // 调用本函数的函数清单
 @TableAccessed: // 被访问的表(此项仅对于牵扯到数据库操作的程序)
 @TableUpdated: // 被修改的表(此项仅对于牵扯到数据库操作的程序)
 @Input: // 输入参数说明,包括每个参数的作用、取值说明及参数间关系。
 @Output: // 对输出参数的说明。
 @Return: // 函数返回值的说明
 @Others: // 其它说明
*************************************************/
#include <stdio.h>	//标准库
#include <stdlib.h>
#include <string.h>
#define N 15        //NAME
#define C 10        //CLASS
#define SN 15         //STUDENT ID
#define STUDENTS_FILE "student.txt"           //存放学生信息1+追加4
#define STUDENTS_RESIDUE "student1.txt"       //存放删除后剩余的信息5
#define STUDENTS_CREATE "student2.txt"        //存放增加后的信息6
#define STUDENTS_COPY "des.txt"               //复制集成

/*    用于功能4(统计)中记录班号和每班得分    */
typedef struct scoreclac{
   
        char tempclass[6];  //  记录班号(学号前五位)
        double sum;//   每个班求和
        struct scoreclac* next; //  指向下一个班求和结构体
    }scc,*sccptr;

/*    核心结构体-学生个人数据    */
typedef struct Student{
   
    char Stu_ID[SN];   //       学号
    char Name[N];       //      姓名
    char Class[C];      //      班级
    double Math;         //     高数
    double English;      //     英语
    double Physics;      //     物理
    double Total_Points;   //   总分
    int Rank;           //      名次
    struct Student *next;   //  指向下一个学生
}Stu,*StuPtr;

StuPtr S=NULL;//    作为链表表头,贯穿整个程序,同时用来判断初始化状态
StuPtr Entering(StuPtr S);//录入:输入数据并将链表数据存储到Student.txt
//void ShowAll();      //显示全部记录:读取Student.txt的数据建立新链表然后输出
void ShowAll(StuPtr S);//显示全部记录:输出链表内容
void Seek(StuPtr S);//查询:根据指定条件查询学生的信息
    void Seek_Rank(StuPtr S);//根据名次查找学生的信息
    void Seek_Class(StuPtr S);//根据班级查找学生的信息
    void Seek_Class3(StuPtr S);//根据班级查找前3名学生的信息
        void Seek_Score_Subject(StuPtr S,int n);//根据各学科成绩的分数区间查询学生信息
        void Seek_Score_All(StuPtr S);//根据总分区间查询学生信息
void Stat(StuPtr S);//统计
    void Stat1(StuPtr S);//统计总分
    void Stat2(StuPtr S);//分班统计
void Del(StuPtr S);//删除:删除单个学生的信息
    void DeleteAll(StuPtr S);//删除所有信息
void Add(StuPtr S);//增加:增加特定对象的信息
void Sort(StuPtr S);//排序:根据某个特征进行排序
    void Sort1(StuPtr S);//根据名次进行排序
    void Sort2(StuPtr S);//根据学号进行排序
void Save(StuPtr S);//保存文件
void Copy();//复制文件
void Infile(StuPtr S,const char *p,const char *pp);//录入文件
StuPtr Readfile2(const char* p);//读取文件创建链表(all)
//void Sum();//计算总分
void TeacherMenu();//教师面板
void StudentMenu();//学生面板
void LoginTeacherSystem();//管理员/教师登陆系统
int testData(StuPtr S);//测试是否录入初始化

/*************************************************
 @Function: main
 @Description: 显示登陆界面
 @Calls: DeleteAll()、LoginTeacherSystem()、StudentMenu()
 @CalledBy:
 @Input:
 @Return: 空类型,无返回值
 @Others: 显示登陆菜单界面,通过变量option的值调用不同函数完成功能
*************************************************/
int main()
{
   
ErrorMenu://登陆系统输入错误处理-返回重新输入
    while(1){
   
        system("cls");
        printf("\n\n                 ||***************************************LOGIN****************************************||\n");
        printf("                 ||                                                                                    ||\n");
        printf("                 ||***********************STUDENT SCHOLARSHIP MANAGEMENT SYSTEM************************||\n");
        printf("                 ||                                                                                    ||\n");
        printf("                 ||====================================================================================||\n");
        printf("                 ||                                                                                    ||\n");
        printf("                 ||==================Welcome to Student Scholarship Management System==================||\n");
        printf("                 ||                                                                                    ||\n");
        printf("                 ||====================================================================================||\n");
        printf("                 ||                                                                                    ||\n");
        printf("                 ||>>>>>>>>>>>>>>>>>>>>>>>>>>>Please select the login method<<<<<<<<<<<<<<<<<<<<<<<<<<<||\n");
        printf("                 ||                                                                                    ||\n");
        printf("                 ||====================================================================================||\n");
        printf("                 ||                                                                                    ||\n");
        printf("                 ||                             1.Administrator login                                  ||\n");
        printf("                 ||                                                                                    ||\n");
        printf("                 ||                             2.Student user login                                   ||\n");
        printf("                 ||                                                                                    ||\n");
        printf("                 ||                             3.Log out                                              ||\n");
        printf("                 ||                                                                                    ||\n");
        printf("                 ||====================================================================================||\n");
        printf("                 ||                                                                                    ||\n");
        printf("                 ||****************************************END*****************************************||\n");
        printf("                 ||->>      Please input your option:");
        int option; //选择变量
        scanf("%d",&option);
        switch(option){
   
            case 1:
                system("cls");
                LoginTeacherSystem();
                break;
            case 2:
                system("cls");
                StudentMenu();
                break;
            case 3:
                system("cls");
                DeleteAll(S);
                exit(0);
            default:
                system("cls");
                printf("\n\n\n\n\n                 ||***********************************STUDENT USER*************************************||\n");
                printf("                 ||                                                                                    ||\n");
                printf("                 ||====================================================================================||\n");
                printf("                 ||                                                                                    ||\n");
                printf("                 ||>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ERROR<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<||\n");
                printf("                 ||                                                                                    ||\n");
                printf("                 ||                              Error!Please input 1-3 !                              ||\n");
                printf("                 ||                                                                                    ||\n");
                printf("                 ||>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ERROR<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<||\n");
                printf("                 ||                                                                                    ||\n");
                printf("                 ||====================================================================================||\n");
                printf("                 ||                                                                                    ||\n");
                printf("                 ||********************Please [enter] to proceed to the next step**********************||\n");

                fflush(stdin);
                getchar();
                goto ErrorMenu;//错误处理,跳回输入
        }
    }
    return 0;
}

/*************************************************
 @Function: Entering
 @Description: 录入学生信息并初始化核心链表
 @Calls: Infile()
 @CalledBy: TeacherMenu()
 @Input: #StuPtr S: 结构体指针-储存学生信息的链表表头
 @Return: #S: 正常退出,返回链表的表头指针
          #NULL: 异常退出,申请空间失败,返回空
 @Others: 输入的数据从链表头链接入链表
*************************************************/
StuPtr Entering(StuPtr S){
   
    char a;//用于重新进入时重复确认是否再次录入
    fflush(stdin);
    if(S){
   //链表不为空时才执行如下代码段,这时已经初始化并录入过数据了
Error_re_entry:
        system("cls");
        printf("\n\n                 ||****************************************MENU****************************************||\n");
        printf("                 ||                                                                                    ||\n");
        printf("                 ||************************************** USER ****************************************||\n");
        printf("                 ||                                                                                    ||\n");
        printf("                 ||====================================================================================||\n");
        printf("                 ||                                                                                    ||\n");
        printf("                 ||>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Please enter your choice<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<||\n");
        printf("                 ||                                                                                    ||\n");
        printf("                 ||====================================================================================||\n");
        printf("                 ||                                                                                    ||\n");
        printf("                 ||  You have entered the data as well, and re-entry will overwrite the previous data  ||\n");
        printf("                 ||                                                                                    ||\n");
        printf("                 ||                                        y/n                                         ||\n");
        printf("                 ||                                                                                    ||\n");
        printf("                 ||====================================================================================||\n");
        printf("                 ||                                                                                    ||\n");
        printf("                 ||**************************************END*******************************************||\n");
        printf("                 ||->>      Please input your option:");
        fflush(stdin);
        a=getchar();
        if(a=='n'||a=='N'){
   
            return S;
        }else if(a=='y'||a=='Y'){
   }
        else{
   
            system("cls");
            printf("\n\n\n                 ||************************************** USER ****************************************||\n");
            printf("                 ||                                                                                    ||\n");
            printf("                 ||====================================================================================||\n");
            printf("                 ||                                                                                    ||\n");
            printf("                 ||>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ERROR<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<||\n");
            printf("                 ||                                                                                    ||\n");
            printf("                 ||                          Error!Pleas enter 'y' or 'n'!                             ||\n");
            printf("                 ||                                                                                    ||\n");
            printf("                 ||>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ERROR<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<||\n");
            printf("                 ||                                                                                    ||\n");
            printf("                 ||====================================================================================||\n");
            printf("                 ||                                                                                    ||\n");
            printf("                 ||********************Please [enter] to proceed to the next step**********************||\n");
            fflush(stdin);
            a=getchar();
            goto Error_re_entry;
        }
    }


    StuPtr head=(StuPtr)malloc(sizeof(Stu));		//为表头分配空间
    if(head){
   //初始化
        head->next=NULL;
        S=head;
    }else{
   
        printf("\n\n\n\n\n||->>                                            Can't Entering!");
        return NULL;//申请空间失败,返回NULL
    }

    while(1){
   //录入
        system("cls");
        StuPtr temp=(StuPtr)malloc(sizeof(Stu));	//为新节点分配空间
        if(temp){
   
            printf("\n\n\nNow please enter the member (Enter [@] in ID to end)\n");
            printf("\n||->>                 Please enter your Student ID:");
            scanf("%s",temp->Stu_ID);

            if(temp->Stu_ID[0]=='@'){
   // 输入学号为@时退出
                free(temp);
                return S;

            }else{
   
                printf("\n||->>                 Please enter your Name:");
                scanf("%s",temp->Name);
                printf("\n||->>                 Please enter your Class:");
                scanf("%s",temp->Class);
                printf("\n||->>                 Please enter your Score of Advanced Mathematics:");
                scanf("%lf",&temp->Math);
                while(temp->Math<0||temp->Math>100){
   
                    printf("\n||->>                 Error! Please input 0-100:");
                    scanf("%lf",&temp->Math);
                }

                printf("\n||->>                 Please enter your Score of College English:");
                scanf("%lf",&temp->English);
                while(temp->English<0||temp->English>100){
   
                    printf("\n||->>                 Error! Please input 0-100:");
                    scanf("%lf",&temp->English);
                }

                printf("\n||->>                 Please enter your Score of College physics:");
                scanf("%lf",&temp->Physics);
                while(temp->Physics<0||temp->Physics>100){
   
                    printf("\n||->>                 Error! Please input 0-100:");
                    scanf("%lf",&temp->Physics);
                }

                temp->Total_Points=0;// 总分和名次都初始化为零
                temp->Rank=0;

                temp->next=S->next;
                S->next=temp;   //  指向下一个
                system("cls");

                printf("\n\n\n\n\n||->>                                            Add member successfully!");
                fflush(stdin);
                getchar();
                if(S->next->next==NULL){
   
                    Infile(S->next,STUDENTS_FILE,"w");                  //如果是第一个就覆盖,其他的就追加
                }else{
   
                    Infile(S->next,STUDENTS_FILE,"a+");
                }
            }
        }else{
   
            printf("\n\n\n\n\n||->>                                            Can't malloc!");
            return NULL;//申请空间失败,返回NULL
        }
    }
    return S;
}

/*************************************************
 @Function: Add
 @Description: 添加学生信息
 @Calls: Infile()
 @CalledBy: TeacherMenu()
 @Input: #StuPtr S: 结构体指针-储存学生信息的链表表头
 @Return: 空类型,无返回值
 @Others: 添加的数据从链表头链接入链表
*************************************************/
void Add(StuPtr S){
   

    if(!S){
   
        printf("\n\n\n\n\n||->>                                 You have not initialized, please try it again!");
        return;
    }else{
   

        StuPtr temp = (StuPtr)malloc(sizeof(Stu));//    为新成员申请空间
        if(!temp){
        //  申请失败
            printf("\n\n\n\n\n||->>                                            Can't add!");
            return;
        }else{
   

            printf("\n\n\n||->>                 Please enter your Student ID:");
            scanf("%s",temp->Stu_ID);
            printf("\n||->>                 Please enter your Name:");
            scanf("%s",temp->Name);
            printf("\n||->>                 Please enter your Class:");
            scanf("%s",temp->Class);
            printf("\n||->>                 Please enter your Score of Advanced Mathematics:");
            scanf("%lf",&temp->Math);
            while(temp->Math<0||temp->Math>100){
   
                printf("\n||->>                 Error! Please input 0-100:");
                scanf("%lf",&temp->Math);
            }
            printf("\n||->>                 Please enter your Score of College English:");
            scanf
  • 7
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值