数据结构课程设计——ytu学生成绩管理系统

本文档详细介绍了ytu学生成绩管理系统的实现,包括动态主界面、管理员登录、学生成绩单创建、增删改查功能,以及成绩查询和排名。系统还具备输出及格、不及格成绩和保存操作结果的功能。作者诚邀读者提供反馈和建议。
摘要由CSDN通过智能技术生成

Part1:说明信息

/********************************************************************
*版权所有 (C)2016,Chang Rui
*
*文件名称:ytu学生成绩管理系统
*文件标识:无
*内容摘要:简单模拟学生成绩管理过程,
            完成对学生成绩信息的建立、增加、删除、查找、修改等功能
*其他内容:无
*
*当前版本:Codeblocks 16.01
*作者:常锐
*完成日期:2016. 12. 29
*********************************************************************/

Part2:头文件systemuser.h  结构体与各个成员函数定义

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <malloc.h>
//结构体定义部分---------------------------------------------------------------------------------
typedef struct User
{
    int is_build;                       //判断学生成绩单是否建立,0-未建立 1-已建立
    int is_login;                       //判断是否登录,0-未登录 1-已登录
    char num[32];                       //学生学号
    char name[32];                      //学生姓名
    char classnum[32];                  //学生所在班级编号
    double score[4];                    //学生4门课的单科成绩
    double total;                       //学生4门课的总成绩
    double average;                     //学生4门课的平均成绩
    struct User *next;                  //指向后继节点的指针
} user;
//各功能函数定义部分------------------------------------------------------------------------------
void Login(user *&L);                   //管理员登录
void StuInit(user *&L);                 //初始化学生信息
void CreateStu(user *&L);               //创建学生成绩单
void InsertStu(user *&L);               //增加学生信息
void DeleteStu(user *&L);               //删除学生信息
void FindStu(user *L);                  //查找学生信息
void ModifyStu(user *L);                //修改学生信息
int Stunum(user *L);                    //记录当前学生个数
int FailStunum(user *L);                //记录当前不及格学生个数
void Sortstu(user *L);                  //学生成绩排名
void DispStu(user *L);                  //输出学生成绩信息
void DispFailstu(user *L);              //输出不及格学生成绩信息
void Save(user *L);                     //保存操作结果

Part3:stufun.cpp 各功能函数实现

#include <stdio.h>
#include "systemuser.h"
/*******************************************
* 功能描述:管理员登录
* 输入参数:用户名和密码
* 输出参数:用户名或密码输出有错误时的提示
********************************************/
void Login(user *&L)                     //管理员登录
{
    char logname[]={"admin"};            //指定管理员登录用户名与密码
    char passwd[]={"ytustu"};
    char l[32],p[32],tmp;                //tmp作为判断输入出错标志,输入#可重新输入信息
    int i=3,j;                           //最多3次机会
    while(i)
    {
        printf("请输入用户名:\n");
        scanf("%s",l);
        printf("请输入密码:\n");
        for(j=0;j<32;j++)                //屏幕上显示密码*
        {
            p[j]=getch();
            if(p[j]=='\r')
            {
                tmp=p[j-1];
                break;
            }
            printf("*");
        }
        p[j]='\0';
        printf("\n");
        if(strcmp(logname,l)==0 && strcmp(passwd,p)==0)//用户名和密码均正确表示登录成功
        {
            L->is_login=1;
            break;
        }
        else if(tmp=='#')
            printf("请重新输入用户名与密码\n");
        else
        {
            printf("用户名或密码错误,请重新输入,您还有%d次机会!\n",i-1);
            i--;
        }
    }
}
/*******************************************
* 功能描述:初始化学生信息
* 输入参数:无
* 输出参数:无
********************************************/
void StuInit(user *&L)                      //初始化学生信息
{
    int i;
    L=(user *)malloc(sizeof(user));
    L->is_build=0;                          //初始状态-成绩单尚未建立
    L->is_login=0;                          //初始状态-管理员未登录
    for(i=0;i<32;i++)                       //初始化各学生信息
    {
        L->num[i]='\0';
        L->name[i]='\0';
        L->classnum[i]='\0';
    }
    for(i=0;i<4;i++)
        L->score[i]=0;
    L->total=0;
    L->average=0;
    L->next=NULL;
}
/*******************************************
* 功能描述:保存操作结果
* 输入参数:无
* 输出参数:操作提示
********************************************/
void Save(user *L)                           //保存操作结果
{
    int i;
    user *p=L->next, *q=L->next;
    FILE *fp;                                //文件指针
    if(p==NULL)
    {
        printf("现在没有学生信息,请先输入学生信息\n");
        return;
    }
    fp=fopen("stu.txt","w");                 //在当前目录下打开stu.txt文件并设置只允许“写”操作
    if(!fp)
    {
        printf("文件不存在\n");
        return;
    }
    //将学生信息与不及格学生信息写入文件
    fprintf(fp,"===========================学生成绩信息一览表===========================\n");
    fprintf(fp,"当前学生个数为:%d\n",Stunum(L));
    fprintf(fp,"学号\t姓名\t班级\tsc1\tsc2\tsc3\tsc4\t总成绩\t平均成绩\n");
    while(p!=NULL)
    {
        fprintf(fp,"%s\t%s\t%s\t%.2lf\t%.2lf\t%.2lf\t%.2lf\t",p->num,p->name,p->classnum,p->score[0],p->score[1],p->score[2],p->score[3]);
        fprintf(fp,"%.2lf\t%.2lf\n",p->total,p->average);
        p=p->next;
    }
    fprintf(fp,"\n=======================不及格学生成绩信息一览表=======================\n");
    fprintf(fp,"当前不及格学生个数为:%d\n",FailStunum(L));
    fprintf(fp,"学号\t姓名\t班级\tsc1\tsc2\tsc3\tsc4\t总成绩\t平均成绩\n");
    while(q!=NULL)
    {
        for(i=0;i<4;i++)
        {
            if(q->score[i]<60)
            {
                fprintf(fp,"%s\t%s\t%s\t%.2lf\t%.2lf\t%.2lf\t%.2lf\t",q->num,q->name,q->classnum,q->score[0],q->score[1],q->score[2],q->score[3]);
                fprintf(fp,"%.2lf\t%.2lf\n",q->total,q->average);
                break;
            }
        }
        q=q->next;
    }
    fclose(fp);                              //把缓冲区内最后剩余的数据输出到内核缓冲区,并释放文件指针
    printf("数据已成功导入文件stu.txt!\n");
}
/******************************************************************
* 功能描述:创建学生成绩单
* 输入参数:学生学号.姓名.班号及4门课的成绩(学号为0时结束输入)
* 输出参数:操作提示
*******************************************************************/
void CreateStu(user *&L)                    //创建学生成绩单
{
    user *s,*r;
    int i;
    double subscore[4];
    if(L->is_login==0)
        printf("请您先登录!\n");
    else
    {
        if(L->is_build==1)
            printf("学生成绩单已建立完成,无需再次建立!\n");
        else
        {
            L=(user *)malloc(sizeof(user));
            r=L;
            printf("请输入学生学号.姓名.班号及4门课的成绩,以0结束输入:\n");
            while(1)
            {
                s=(user *)malloc(sizeof(user));
                scanf("%s",s->num);
                if(strcmp(s->num,"0")==0)
                {
                    printf("输入结束,您已退出本操作...\n");
                    break;
                }
      
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值