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;
}