c语言学生成绩管理系统.docx

上传人:b****5 文档编号:6015626 上传时间:2023-01-03 格式:DOCX 页数:29 大小:303.39KB
下载 相关 举报
c语言学生成绩管理系统.docx_第1页
第1页 / 共29页
c语言学生成绩管理系统.docx_第2页
第2页 / 共29页
c语言学生成绩管理系统.docx_第3页
第3页 / 共29页
c语言学生成绩管理系统.docx_第4页
第4页 / 共29页
c语言学生成绩管理系统.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

c语言学生成绩管理系统.docx

《c语言学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《c语言学生成绩管理系统.docx(29页珍藏版)》请在冰豆网上搜索。

c语言学生成绩管理系统.docx

c语言学生成绩管理系统

 

青岛农业大学

本科生课程论文

 

论文题目学生成绩管理系统

学生专业班级通信工程1001

学生姓名(学号)李庆坤(20101794)

指导教师于爱华

完成时间2011-09-06

 

2011年9月14日

学生成绩管理系统

摘要

21世纪以来,人类经济高速发展,人们发生了日新月异的变化,特别是计算机的应用及普及到经济和社会生活的各个领域。

为了适应现代社会人们高度强烈的时间观念,学校信息管理系统软件为学校的办公带来了极大的方便,而学生成绩管理系统更是这些软件中的佼佼者。

本文详细给出了学习成绩管理系统的设计、功能、程序以及调试运行与显示情况。

一、任务与分析

学习成绩管理系统功能要求:

输入记录模块、查询记录模块、更新记录模块、统计记录模块、输出记录模块。

程序中涉及结构体、单链表、文件等方面的知识。

本系统由结构体、数组、函数、文件、指针等组成,通过调用各种函数,利用菜单实现了各项功能。

程序将数据储存在.txt文件中,可以方便的读取与写入。

本程序增设密码功能防止被人窃取数据,此外由信息维护菜模块、信息查询模块、成绩统计模块、成绩排序模块共同组成,分为教师和学生用户共同完成对学习成绩的管理。

其详细流程图如下:

返回主菜单

个人成绩查询

用户名及密码修改

返回主菜单

成绩排序

成绩查询

信息查询

信息维护

用户名及密码修改

学生

教师

 

选择用户菜单

 

信息维护菜单下设子菜单:

添加学生信息、修改学生信息、删除学生信息、复制账单信息、清空信息记录。

信息查询菜单下设子菜单:

查询文件总数、查询所有信息、按姓名查询信息、按学号查询信息。

二、程序设计

1.程序介绍

此学习成绩管理系统分为两个用户,即教师用户和学生用户,教师用户可以用此程序完成学生成绩的维护、查询、统计等各项功能,而学生用户可以完成对学生本人信息的查询。

程序自动将教师用户信息自动保存在f1.txt文件中,将学生用户信息自动保存在f2.txt文件中,将学生成绩信息自动保存在list.txt文件中,数据不随程序的关闭而消失。

2.函数调用

◎inputchoice()教师用主菜单

◎inputchoice_stu()学生用主菜单

◎inputchoice1()教师用信息维护菜单

◎inputchoice2()教师用信息查询菜单

◎Enter()用户登录

◎Modify()密码及用户名修改

◎getlogcount()获取文件记录总数

◎ListAllLog()读取所有信息(教师使用)

◎read_name()按姓名查询信息(教师使用)

◎read_num()按学号查询信息(教师使用)

◎find_stu()个人信息查询(学生使用)

◎Addnewlog()添加学生信息(教师使用)

◎change()修改信息

◎del()删除信息(教师使用)

◎copy()复制账单(教师使用)

◎delet()清空账单信息(教师使用)

◎order()账单信息排序(教师使用)

◎sort()排序关键字选择(教师使用)

◎census1()学生信息统计(教师使用)

◎census()学生信息统计选择菜单(教师使用)

◎choice_user()用户类型选择

◎choice1()信息维护菜单选择操作(教师使用)

◎choice2()信息查询菜单选择操作(教师使用)

◎choice()主菜单选择操作

3.功能模块分析

(1)头文件、结构体定义

#include"stdio.h"

#include"stdlib.h"

#include"string.h"

#include"windows.h"

#defineM20//学生人数

longsize,Size;//结构体长度

charch[15];//保存登陆的学生学号

typedefstructLogData

{charlogid[10];//记录学号

charname[10];//姓名

doubleXinhao;//信号

doubleModian;//模电

doubleEnglish;//英语

}ListNode;

typedefstructnode

{charpass[10];//密码

charname[10];//用户名

}Node;

(2)菜单选择模块

以信息维护菜单(教师使用)为例:

通过调用函数inputchoice1(),在屏幕上显示

voidinputchoice1()

{

printf("#####################信息维护菜单##################\n"

"#0:

退出信息维护#\n"

"#1:

返回信息维护菜单#\n"

"#2:

添加学生信息#\n"

"#3:

修改学生信息#\n"

"#4:

删除学生信息#\n"

"#5:

复制账单信息#\n"

"#6:

清空信息记录#\n"

"#####################################################\n\n");

}

用switch选择菜单选项,再调用函数

voidchoice2(FILE*fp)

{

intchoice;

while(choice!

=0)

{

printf("请选择信息查询所需功能:

");

scanf("%d",&choice);

switch(choice)

{

case1:

//返回信息查询菜单

inputchoice2();break;

case2:

//查询文件记录总数

getlogcount(fp);break;

case3:

//查询所有信息

ListAllLog(fp);break;

case4:

//按姓名查询信息

read_name(fp);break;

case5:

//按学号查询信息

read_num(fp);break;

default:

printf("输入序号错误或则你选择了退出查询功能,程序将自动返回主菜单选择功能!

\n");inputchoice();break;

}

}

}

(3)用户名及密码模块

此模块有力的保证了系统用户数据的安全性。

用户登录时,密码验证:

printf("请输入用户名:

");

scanf("%s",a);

getchar();

printf("请输入密码:

");

scanf("%s",b);

for(intt=0;t<10;t++)

ch[t]=a[t];//将登录成功的用户名保存在全局变量中

while(success==1||j

{

m=strcmp(log[j].name,a);

n=strcmp(log[j].pass,b);

j++;

if(m==0&&n==0)

{

success=1;break;

}

}

*s=j;//保存用户名的位置

if(success==1)

printf("********** 登录成功,进入学生成绩管理系统!

*********\n");

else

printf("*******用户名不存在或密码错误!

请重新登录!

********\n");

密码即用户名修改:

intModify(FILE*fp1,FILE*fp2,intk)

{//密码及用户名修改

inti=0,j=0,success=0;Nodelog[M];

ints=0;

charname[10];

charpassword[10],password1[10];

charname1[10],password2[10];

 

if(k==1)//获取教师密码文件信息

{

if((fp1=fopen("f1.txt","r"))==NULL)

{printf("cannotopenfilef1.txt!

\n");

exit(0);

}

fseek(fp1,Size+4,SEEK_SET);

while(!

feof(fp1))

{

fscanf(fp1,"%s%s",log[i].name,log[i].pass);

i++;

}

}

if(k==2)//获取学生密码文件信息

{

if((fp2=fopen("f2.txt","r"))==NULL)

{printf("cannotopenfilef2.txt!

\n");

exit(0);

}

fseek(fp2,Size+4,SEEK_SET);

while(!

feof(fp2))

{

fscanf(fp2,"%s%s",log[i].name,log[i].pass);

i++;

}

}

printf("*********** 正在进入密码修改界面!

****************\n");

printf("********请先输入原用户名及密码再进行修改!

********\n");

if(Enter(fp1,fp2,k,&s)!

=0)

{

if(k==1)

{

if((fp1=fopen("f1.txt","w"))==NULL)

{printf("error\n");

exit(0);

}

}

if(k==2)

{

if((fp2=fopen("f2.txt","w"))==NULL)

{printf("error\n");

exit(0);

}

}

if(k==1)

printf("请输入新的用户名(不超过十个字符,汉字按两个字符计算):

\n");

scanf("%s",name);

if(k==2)//学生用户只能更改密码

printf("学生用户名只能使用学号,不允许修改!

\n");

printf("请输入新的密码(不超过十个字符,汉字按两个字符计算):

\n");

scanf("%s",password);

printf("请再次输入密码确认:

");

scanf("%s",password1);

if(strcmp(password,password1)==0)//修改成功,写入新用户名及密码

{printf("*****************密码输入正确!

****************\n");

for(intt=0;t<10;t++)

{

if(k==1)

log[s-1].name[t]=name[t];

log[s-1].pass[t]=password[t];

}

fseek(fp1,0,SEEK_SET);

if(k==1)fprintf(fp1,"用户名密码\n");

if(k==2)fprintf(fp2,"用户名密码\n");

for(t=0;t

{if(k==1)

fprintf(fp1,"%10s%10s\n",log[t].name,log[t].pass);

if(k==2)

fprintf(fp2,"%10s%10s\n",log[t].name,log[t].pass);

}

printf("*****************修改成功!

*******************\n");success=1;

}

else//修改失败,写入原用户名及密码

{

printf("***********修改失败:

两次密码输入不相同!

**********\n");

fputs(name1,fp1);

fputc('\n',fp1);

fputs(password2,fp1);

}

if(k==1)

if(fclose(fp1))

{

printf("cannotclosef2.txt!

\n");

exit(0);

}

if(k==2)

if(fclose(fp2))

{

printf("cannotclosef2.txt!

\n");

exit(0);

}

}

returnsuccess;

}

(4)信息维护模块

此模块可以添加学生信息、修改学生信息、删除学生信息、复制账单信息以及清空信息记录,是此系统的主要功能模块。

添加的新信息将自动保存在list.txt文件中,复制的信息将自动保存在list1.txt文件中。

添加学生信息:

voidAddnewlog(FILE*cfptr)

{

ListNodelog;

longlogcount=0;

if((cfptr=fopen("list.txt","a"))==NULL)

{

printf("cannotopenfilelist.dat!

\n");

exit(0);

}

logcount=getlogcount(cfptr);

printf("--请依次输入姓名学号信号模电英语--\n");

scanf("%s%s%lf%lf%lf",log.name,&log.logid,&log.Xinhao,&log.Modian,&log.English);

fseek(cfptr,0L,SEEK_END);

fprintf(cfptr,"%10s%8s%3.1lf%3.1lf%3.1lf\n",log.name,log.logid,log.Xinhao,log.Modian,log.English);

fclose(cfptr);

printf("*********************信息添加成功*********************\n");

}

修改学生信息:

voidchange(FILE*cfptr)

{

ListNodelog;intsuccess=0;

chara[20];intchoice;intb;

if((cfptr=fopen("list.txt","r+"))==NULL)

{

printf("cannotopenfilelist.dat!

\n");

exit(0);

}

printf("################欢迎进入修改信息界面###############\n"

"#0:

退出信息修改#\n"

"#1:

按姓名修改信息#\n"

"#2:

按学号修改信息#\n"

"#####################################################\n\n"

"请按上述提示选择您所需的操作;");

scanf("%d",&choice);

if(choice==0)

{

printf("您选择了退出信息修改功能,程序自动返回信息维护界面!

\n");

return;

}

elseif(choice==1)

{

printf("请输入姓名:

");

scanf("%s",a);

}

elseif(choice==2)

{

printf("请输入学号:

");

scanf("%s",a);

}

else

{

printf("您输入的指令符错误,程序自动返回信息维护界面!

\n");

return;

}

longcount=getlogcount(cfptr);fseek(cfptr,size,SEEK_SET);

while(count>0&&success==0)

{

count--;

fscanf(cfptr,"%s%s%lf%lf%lf",log.name,&log.logid,&log.Xinhao,&log.Modian,&log.English);

if((strcmp(log.name,a)==0&&choice==1)||(strcmp(log.logid,a)==0&&choice==2))

{

printf("******************修改前的信息****************\n");

printf("姓名学号信号模电英语\n");

printf("%10s%10s%3.1lf%3.1lf%3.1lf\n",log.name,log.logid,log.Xinhao,log.Modian,log.English);

printf("0.修改所有关键字,,修改语文,修改数学,修改英语");

scanf("%d",&b);

if(b==1)

{

printf("请输入修改后的信号成绩:

");

scanf("%lf",&log.Xinhao);

}

elseif(b==2)

{

printf("请输入修改后的模电成绩:

");

scanf("%lf",&log.Modian);

}

elseif(b==3)

{

printf("请输入修改后的英语成绩:

");

scanf("%lf",&log.English);

}

elseif(b==0)

{

printf("请输入修改后的信息\n");

printf("--请依次输入姓名学号信号模电英语--\n");

scanf("%s%s%lf%lf%lf",log.name,&log.logid,&log.Xinhao,&log.Modian,&log.English);

}

else

{

printf("您输入的指令符错误,程序自动返回信息维护界面!

\n");

return;

}

fseek(cfptr,-size+1,SEEK_CUR);

fprintf(cfptr,"%10s%8s%3.1lf%3.1lf%3.1lf\n",log.name,log.logid,log.Xinhao,log.Modian,log.English);

success=1;

printf("*********************信息修改成功********************\n");

}

}

fclose(cfptr);

if(success=0)

printf("*********************信息修改失败********************\n");

}

删除学生信息:

voiddel(FILE*fp)

{

FILE*fp1;longcount,n;inti=0,j=0;chara[20],b[100]={"姓名学号信号模电英语\n"};

ListNodelog[M];

charc;intm=0;

if((fp=fopen("list.txt","r"))==NULL)

{printf("cannotopenfilelist.txt!

\n");

exit(0);

}

if((fp1=fopen("copy.txt","w"))==NULL)

{printf("cannotopenfilelist.txt!

\n");

exit(0);

}

while(!

feof(fp))

{

c=fgetc(fp);

fputc(c,fp1);

}

fclose(fp);fclose(fp1);

if((fp=fopen("list.txt","w"))==NULL)

{printf("cannotopenfilelist.txt!

\n");

exit(0);

}

if((fp1=fopen("copy.txt","r"))==NULL)

{printf("cannotopenfilelist.txt!

\n");

exit(0);

}

count=getlogcount(fp1);

n=count;

fseek(fp1,size,SEEK_SET);

while(count>0&&i

{count--;

fscanf(fp1,"%s%s%lf%lf%lf",log[i].name,&log[i].logid,&log[i].Xinhao,&log[i].Modian,&log[i].English);

i++;

}

printf("请输入要删除的姓名或学号:

\n");

scanf("%s",&a);

while(b[j]!

='\0')

{

c=b[j];

fputc(c,fp);

j++;

}

for(i=0;i

{

if(strcmp(log[i].name,a)!

=0&&strcmp(log[i].logid,a)!

=0)

fprintf(fp,"%10s%8s%3.1lf%3.1lf%3.1lf\n",log[i].name,log[i].logid,log[i].Xinhao,log[i].Modian,log[i].English);m++;

}

if(m

printf("******************%s信息删除成功*****************\n",a);

else

printf("删除失败,文件中不存在%s的信息!

\n",a);

if(fclose(fp))

{

printf("cannotclosethefile!

\n");

exit(0);

}

if(fclose(fp1))

{

printf("cannotclosethefile!

\n");

exit(0);

}

fp1=fopen("copy.txt","w");

fclose(fp1);//清空辅助文件copy.txt

}

(5)信息查询模块

此模块可以获取文件记录总数、查询所有信息、按姓名查询信息、按学号查询信息,可以方便教师迅速的查到学生的各科成绩。

查询全部信息:

voidListAllLog(FILE*cfptr)

{

ListNodelog;longcount;

printf("------------------所有学生信息-----------------------\n");

printf("姓名学号信号模电英语\n");

count=getlogcount(cfptr);fs

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高中教育 > 小学教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1