平时成绩管理系统
- 格式:doc
- 大小:1.54 MB
- 文档页数:77
学生成绩管理系统我将把我的实现步骤完整的写出来,我是在VC 6.0版本下用MFC实现的。
我创建的基于单文档的应用程序,过程不介绍,大家都会。
下面的是我系统菜单:思路:刚进入系统时,只有“登录”菜单可用,其他三个菜单项都是灰色不可用的。
当用户点“进入系统”菜单项时,用户输入用户名、密码和用户类型,系统将根据相应的用户权限使相应的菜单可用,并且“进入系统”菜单项变为不可用。
如:如果用户类型是学生,那么只有学生权限菜单可用,而“教师权限”和“管理员权限”都不可用,同时“进入系统”变为不可用。
“学生权限”下只有“查询成绩”,因为学生只可以查询自己相应的成绩;“教师权限”下有“查询学生成绩”和“增改删学生成绩”两个菜单项,因为教师除了可以查询学生成绩还可以增加、修改和删除学生成绩;“管理员权限”下有“管理学生”和“管理教师”两个菜单项。
整体设计:因为我们要设置系统菜单的状态,所以必须在CMainFrame中添加相应的函数和代码,具体步骤如下:【步骤1】由于系统要使用ODBC类操作数据库,所以需要在stdafx.h中加入代码:#include <afxdb.h>【步骤2】在CMainFrame中的OnCreat()中添加代码如下,实现菜单的初始化工作,当用户没进入系统之前,只有“登陆”菜单下的“进入系统”菜单项可用,而“退出系统”和其他3个权限菜单都不可用,即都是灰色的。
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){//使“退出系统”和其他3个权限菜单都不可用,即都是灰色的GetMenu()->GetSubMenu(0)-> EnableMenuItem(1,MF_BYPOSITION | MF_DISABLED | MF_GRAYED);GetMenu()-> EnableMenuItem(1,MF_BYPOSITION | MF_DISABLED | MF_GRAYED);GetMenu()-> EnableMenuItem(2,MF_BYPOSITION | MF_DISABLED | MF_GRAYED);GetMenu()-> EnableMenuItem(3,MF_BYPOSITION | MF_DISABLED | MF_GRAYED);}【步骤3】在CMainFrame中添加自己定义的函数void SetMenuSta(int type),此函数在登陆对话框的OnOK()中被调用,即当用户进入系统后使“进入系统”菜单项不可用,并根据用户类型使相应菜单可用。
版本号日期“学生成绩管理系统”软件设计说明书姓名班级学号完成日期指导老师目录目录 (2)1 引言 (4)1.1 编写目的 (4)1.2 范围 (4)1.3 定义 (5)1.4 参考资料 (5)2 项目概述 (5)2.1 产品描述 (5)2.2 产品功能 (6)2.3 用户特点 (7)2.4 一般约束 (7)2.5 假设和依据 (7)3 具体需求 (8)3.1 功能需求 (8)3.2 行为需求 (10)3.3 数据需求 (10)3.4 外部接口需求 (11)3.4.1 用户接口 (11)3.4.2 硬件接口 (11)3.4.3 软件接口 (12)3.5 性能需求 (12)3.6 设计约束 (12)3.6.1 其他标准的约束 (12)3.6.2 硬件的限制 (13)3.7安全性 (13)3.8 可维护性 (13)3.9 可转移\转换性 (13)3.10 数据库 (13)4 总体设计 (14)4.1运行环境 (14)4.2基本设计概念和处理流程 (14)4.3系统结构 (15)4.4 接口设计 (15)4.4.1用户接口 (15)4.4.2内部接口 (15)4.5功能需求与程序的关系 (16)4.6人工处理过程 (16)4.7尚未问决的问题 (16)5 详细设计 (17)5.1系统数据结构设计 (17)5.1.1逻辑结构设计要点 (17)5.1.2物理结构设计要点 (18)5.2模块设计说明 (19)5.2.1模块描述 (19)5.2.2功能 (19)5.2.3性能 (20)5.2.4输入项 (20)5.2.5输出项 (20)5.2.6设计方法(算法) (21)5.2.7流程逻辑 (25)5.2.8接口 (26)5.2.9存储分配 (26)5.2.10注释设计 (26)5.2.11限制条件 (26)5.2.12测试计划 (26)5.2.13尚未解决的问题 (27)5.3 运行设计 (27)5.3.1运行模块组合 (27)5.3.2运行控制 (28)5.3.3运行时间 (28)5.4系统出错处理设计 (28)5.4.1出错信息 (28)5.4.2补救措施 (29)5.5系统维护设计 (30)附录: (31)1 引言1.1 编写目的此软件需求说明书是针对所开发的【成绩管理系统】进行详细解释说明。
学生成绩管理系统学生成绩管理系统是现代教育管理中一种重要的工具,它通过科技手段实现对学生学业情况的全面监测和评估。
学生成绩管理系统能够及时记录学生成绩,对学生学习情况进行分析和反馈,为学校和家长提供有关学生学业发展的重要信息。
本文将从学生成绩管理系统的定义、功能和优势三个方面进行探讨,以期了解学生成绩管理系统对教育管理的积极影响。
学生成绩管理系统是一种基于互联网的教学管理工具,它通过网络互联和数据存储技术,对学生的学习情况进行有效管理和分析。
学生成绩管理系统的核心功能包括学生成绩记录、统计、分析和反馈。
学生成绩记录是指将学生的考试成绩、作业成绩等数据录入系统中进行保存和管理,以便于学校和教师随时查阅。
学生成绩统计是指根据学生成绩数据进行统计和分析,得出班级、年级、学校甚至全市、全国范围内学生学习情况的综合指标。
学生成绩分析是指通过对学生成绩数据进行深入分析,探究学生学习特点、强项和薄弱点,为教学设计和评估提供依据。
学生成绩反馈是指将学生成绩情况及时反馈给学生、家长和教师,帮助他们了解学生的学业发展状况,并及时进行调整和指导。
学生成绩管理系统的功能非常丰富,可以满足各个教育管理环节的需求。
首先,学生成绩管理系统可以有效提高教务管理效率。
传统的成绩管理方式往往需要耗费大量人力物力进行成绩记录和统计工作,而学生成绩管理系统能够自动完成这些任务,大大减轻了教务人员的工作负担。
其次,学生成绩管理系统可以为教学设计和评估提供科学依据。
通过对学生成绩数据进行深入分析和比较,教师可以了解学生的学习水平和特点,为针对性教学提供支持。
再次,学生成绩管理系统可以促进学生、家长和教师之间的沟通和合作。
通过及时的成绩反馈和学业信息共享,学生和家长可以了解学生在学校的学业状况,及时与教师进行沟通和交流,共同关注学生的学习发展。
最后,学生成绩管理系统还可以提供学生综合素质评价的参考依据。
学生成绩管理系统不仅仅可以记录和统计学生的考试成绩,还可以记录学生的课堂表现、作业完成情况、课外活动等能力表现,为学生的个性化发展提供指导。
“学生学习成绩管理系统”用于对学生学习成绩数据文件的新文件创建和老文件管理,并可以进行密码设置。
具体要求实现的功能如下:1、输入/添加记录:将每一个学生的学号、姓名和各科学习成绩作为一个记录进行输入或添加。
要求经过密码验证后能建立一个新的数据文件或给已建立好的数据文件增加记录。
2、显示、查询记录:能按学生姓名(或学号)显示、查询一个或多个学生的各门(或某门)功课的成绩和平均成绩。
3、修改记录:可以对数据文件中的任意记录的数据进行修改,在修改前后对该记录的内容进行显示,并设确认提示。
(要求设置密码,验证通过后方可进入修改环节)4、删除记录:可以删除数据文件中的任一记录,包括逻辑删除(具有恢复功能)和物理删除(不可恢复)。
(说明:该功能也应设置为经过验证密码后才可实施删除)5、成绩排序:采用不同的排序方法对单科成绩和总(或平均)成绩进行排序,但不能改变原记录的顺序。
6、统计功能:(A)计算各门课程全班总成绩及平均成绩;(B)统计各门课程得分为100、90~99、80~89、70~79、60~69和不及格学生的人数,以及与全班总人数的百分比。
7、其他:该软件应具有系统名称、设计单位或个人等基本信息。
学生成绩管理系统源程序清单:#include<stdio.h>#include<string.h>#include<malloc.h>#include<conio.h>#define NULL 0#define LEN sizeof(student)#define N 5typedef struct stu{int flag;long num;char name[10];int score[N];struct stu *next;}student;void edit();/*编辑菜单*/void search(student *head); /*查找函数*/student *search_number(student *head,long number); /*按学号查找*/ void search_name(student *head); /*按姓名查找*/student *search_score(student *head,int min,int max,int i); /*按成绩查找*/void enter_record(student *p); /*输入成绩*/student *creat(void); /*建立链表*/student * insert(student *head); /*插入结点*/void count(int *p); /*计算总成绩及平均成绩*/void print(student *p); /*输出结点*/void print_title();/*输出标题*/student *delete(student *head); /*删除结点*/void recover(student *head); /*恢复删除*/void revise(student *head); /*修改记录*/void tongji(student *head); /*统计*/void paixu(student *head,int m); /*排序*/int cipher_check();/*密码检测*/void set_up_cipher();/*设立密码*/student *load();/*载入*/void save(student *head); /*保存*/void about();/*关于*/int n;char cipher[11]={""};/*字符串,保存密码*/main(){char c;student *head=NULL;system("cls");about();for(;;){system("cls");printf("************************************************************ *******************\n");printf("\t\t Welcome to\n");printf("\n\t\t The student score manage system\n");printf("*************************************MENU******************* *******************\n");printf("\t\t\t1. Creat the record\n");printf("\t\t\t2. Load the file\n");printf("\t\t\t3. Edit the record\n");printf("\t\t\t4. About design\n");printf("\t\t\t5. Quit\n");printf("************************************************************ ********************\n");printf("\n\t\t\tEnter your choice(1~5):");for(;;){c=getchar();if(c=='\n') continue;else if(c<'1'||c>'5') printf("\t\t\tEnter your choice(1~5):"); else break;}getchar();switch (c){case '1':head=creat();if(head==NULL){printf("Empty record!\n\nEnter any key to continue...\n"); getch();break;}set_up_cipher();printf("Enter any key to edit menu...");getch();edit(head);break;case '2':head=load();if(head==NULL){printf("\nEnter any key to continue...");getch();break;}printf("Enter any key to edit menu...");getch();edit(head);break;case '3':edit(head);break;case '4':about();break;case '5':exit(0);}}}void edit(student *head)/*编辑菜单*/{char c,m;int i,f=0;for(;;){system("cls");printf("***********************************EDIT*MENU**************** ********************\n");printf("\t\t\t1.Save the record.\n");printf("\t\t\t2.Insert a record.\n");printf("\t\t\t3.Delete a record.\n");printf("\t\t\t4.Recover the record.\n");printf("\t\t\t5.Revise the record.\n");printf("\t\t\t6.Search records.\n");printf("\t\t\t7.Sort the records.\n");printf("\t\t\t8.Tongji the records.\n");printf("\t\t\t9.Change the password.\n");printf("\t\t\t0.Return to main menu.\n");printf("************************************************************ ********************\n");printf("\t\t\tEnter your choice(0~9):");for(;;){c=getchar();if(c=='\n') continue;else if(c<'0'||c>'9') printf("\t\t\tEnter your choice(0~9):"); else break;}switch (c){case '1':save(head);f=0;break;case '2':printf("Please enter the right password:\n");if(cipher_check()==0){printf("Wrong password!\n"); break;}head=insert(head);f=1;break;case '3':printf("Please enter the right password:\n");if(cipher_check()==0){printf("Wrong password!\n"); break;}head=delete(head);f=1;break;case '4':printf("Please enter the right password:\n");if(cipher_check()==0){printf("Wrong password!\n"); break;}recover(head);f=1;break;case '5':printf("Please enter the right password:\n");if(cipher_check()==0){printf("Wrong password!\n"); break;}revise(head);f=1;break;case '6':search(head);break;case '7':printf("Sort on which subject?\n");printf("score1(1)/score2(2)/score3(3)/sum(4)\n");for(;;){scanf("%c",&m);if(m=='\n') ;else if(m>='1'&&m<='4') break;else printf("error!enter again:");}i=m-'0'-1;paixu(head,i);break;case '8':tongji(head);break;case '9':printf("Please enter the old password:\n");if(cipher_check()) {set_up_cipher();f=1;}else printf("Wrong password!\n");break;case '0':if(f==1){char c;printf("This record has already been revised.\nSave the record or not? ");for(;;){c=getchar();if(c=='\n') continue;else if(c=='y'||c=='Y') {save(head);break;}else if(c=='n'||c=='N') break;else printf("error!enter again:");}}return;}printf("\nenter any key to return...");getch();}}student *creat(void) /*建立链表*/{student *head,*p1,*p2;n=0;p1=(student *)malloc(LEN);p2=NULL;printf("please enter number");printf("(enter 0 to end):\n");scanf("%ld",&p1->num);head=NULL;while(p1->num!=0){n++;enter_record(p1);if(n==1) head=p1;else p2->next=p1;p2=p1;p1=(student *)malloc(LEN);printf("Please enter next number(0 to end):\n");scanf("%ld",&p1->num);}if(n!=0)p2->next=NULL;free(p1);return head;}student * insert(student *head) /*插入结点*/{student *p1,*p2,*new_node;for(;;){new_node=(student *)malloc(LEN);if(new_node==NULL){printf("Database is full,can't add more record.\n");return NULL;}printf("\nPlease enter the number you want to insert\n(enter 0 to end):");scanf("%ld",&new_node->num);if(new_node->num==0) {break;}for(p1=head,p2=NULL;p1!=NULL&&(new_node->num)>(p1->num);p2=p1,p1=p1->next);if(p1!=NULL&&(p1->num)==(new_node->num)&&p1->flag==1){char c;printf("This number already exists:\n");print_title();print(p1);printf("Cover or not?(y/n)?");for(;;){c=getchar();if(c=='n'||c=='N'){free(new_node);break;}else if(c=='y'||c=='Y'){free(new_node);enter_record(p1);break;}else if(c!='\n')printf("Error!enter again:");else continue;}}else if(p1!=NULL&&(p1->num)==(new_node->num)){n++;free(new_node);enter_record(p1);}else{n++;enter_record(new_node);new_node->next=p1;if(p2==NULL)head=new_node;elsep2->next=new_node;}}return head;}student *delete(student *head) /*删除结点*/{long number;char c;student *p1,*p2;for(;;){printf("Please enter the number you want to delete(enter 0 to end):\n");scanf("%ld",&number);if(!number) break;for(p1=head,p2=NULL;p1!=NULL&&p1->num!=number;p2=p1,p1=p1->next);if(p1==NULL||p1->flag==0){printf("this number doesn't exist.\n");}else{print_title();print(p1);printf("delete this record?\n");printf("sure(s)/cancle(c)/delete thoroughly(t)\n");for(;;){c=getchar();if(c=='c'||c=='C') break;else if(c=='s'||c=='S'||c=='t'||c=='T'){n--;if(c=='s'||c=='S')p1->flag=0;else{if(p2==NULL) head=p1->next;else p2->next=p1->next;free(p1);}break;}else if(c!='\n')printf("error!enter again:");}}}return head;}void recover(student *head) /*恢复删除*/{student *p;long number;printf("recover which number?\n");scanf("%ld",&number);if(number==0) return;p=search_number(head,number);if(p==NULL) printf("Can't recover this number!\n");else if(p->flag==1) printf("This number has not been deleted.\n"); else {n++;p->flag=1;printf("Recover success!\n");}}void revise(student *head) /*修改记录*/{char c;long number;student *p1;for(;;){printf("Which number do you want to revise?\n(enter 0 to end):"); scanf("%ld",&number);if(number==0) return;p1=search_number(head,number);if(p1==NULL||p1->flag==0) {printf("this number doesn'texist.\n");continue;}print_title();print(p1);printf("Do you want to revise the record?(y/n)\n");for(;;){c=getchar();if(c=='\n') continue;else if(c=='n'||c=='N') break;else if(c=='y'||c=='Y'){printf("please enter new record:\n");enter_record(p1);printf("the new record is:\n");print_title();print(p1);break;}else printf("error,enter again:");}}}void search(student *head) /*查找函数*/{char c;int i,min,max;long number;student *p;printf("Please enter search conditions:\n");printf("all(a)/number(n)/name(m)/score(s)/return(r)\n");for(;;){c=getchar();if(c=='\n') continue;else if(c=='s'){printf("Which couse do you want to search?\n");printf("score1(1)/score2(2)/score3(3)/total(4)/average(5)");for(;;){c=getchar();if(c=='\n') continue;else if(c>'0'&&c<'6') {i=c-'0'-1;break;}else printf("Error,enter again:");}printf("please enter min and max score(min-max):");scanf("%d-%d",&min,&max);p=search_score(head,min,max,i);if(p==NULL)printf("No record\n");else{ print_title();for(;p!=NULL;p=search_score(p->next,min,max,i))print(p);}}else switch(c){case 'a':print_title();for(p=head;p!=NULL;p=p->next)if(p->flag==1) print(p);break;case 'n':printf("What number do you want to search?\n");scanf("%ld",&number);p=search_number(head,number);if(p==NULL||p->flag==0) printf("This number doesn't exist!\n"); else{print_title();print(p);}break;case 'm':search_name(head);break;case 'r': return;default :printf("this condition doesn't exist,Pleaseenter again:\n");printf("all(a)/number(n)/name(m)/score(s)/return(r)\n");continue;}printf("Please enter search conditions:\n");printf("all(a)/number(n)/name(m)/score(s)/return(r)\n");}}student *search_number(student *head,long number) /*按学号查找*/ {student * p;for(p=head;p!=NULL&&p->num!=number;p=p->next);return p;}void search_name(student *head) /*按姓名查找*/{student *p1;char *p,str[10];p=str;printf("please enter the name you want to search:\n");scanf("%s",p);for(p1=head;p1!=NULL;p1=p1->next){if(p1->flag==0) continue;if(strcmp(p,p1->name)==0) break;}if(p1==NULL) printf("this people doesn't exist.\n");else{print_title();for(;p1!=NULL;p1=p1->next)if(strcmp(p,p1->name)==0&&p1->flag==1)print(p1);}}student *search_score(student *head,int min,int max,int i) /*按成绩查找*/{student *p1;for(p1=head;p1!=NULL;p1=p1->next)if(p1->flag==1&&p1->score[i]>=min&&p1->score[i]<=max) break;return p1;}void paixu(student *head,int m)/*排序*/{long *number,t;int i,j,k,max;student *p;number=calloc(n,sizeof(long));i=0;for(p=head;p!=NULL;p=p->next){if(p->flag==0) continue;number[i]=p->num;i++;}for(i=0;i<n-1;i++){k=i;max=search_number(head,number[i])->score[m];for(j=i+1;j<n;j++){p=search_number(head,number[j]);if(p->score[m]>max){max=p->score[m];k=j;}}if(k!=i){t=number[i];number[i]=number[k];number[k]=t;}}printf("************************************************************ ****************\n");if(m==3) printf("Sord by sum score:\n");else printf("Sord by score%d:\n",m+1);printf("mingci ");printf("number name score1 score2 score3 total aver\n");for(i=0;i<n;i++){printf("%4d ",i+1);print(search_number(head,number[i]));}}void tongji(student *head) /*统计*/{int i,sum,s,j;student *p1;printf("************************************************************ ****************\n");printf(" sum average\n");for(i=0;i<N-2;i++){sum=0;for(p1=head;p1!=NULL;p1=p1->next)if(p1->flag==1) sum+=p1->score[i];printf(" score%d:%6d%9.2f\n",i+1,sum,(float)sum/n);}for(sum=0,p1=head;p1!=NULL;p1=p1->next)if(p1->flag==1) sum+=p1->score[N-2];printf(" sum :%6d%9.2f\n",sum,(float)sum/n);printf("average:%6.2f%9.2f\n",(float)sum/(N-2),(float)sum/(N-2)/n); printf("************************************************************ ****************\n");printf("Ge fenshuduan renshu:\n");printf(" 100 90-99 80-89 70-79 6 0-69 fail\n");printf(" score digit rate digit rate digit rate digit rate digit rate digit rate\n");for(i=0;i<N-2;i++){printf("score%d",i+1);for(s=100;s>=60;s-=10){j=0;for(p1=search_score(head,s,s+9,i);p1!=NULL;p1=search_score(p1->next,s,s+9,i))j++;printf("%5d,%6.2f",j,(float)j/n);}for(j=0,p1=search_score(head,0,59,i);p1!=NULL;p1=search_score(p1->next,0,59,i))j++;printf("%5d,%6.2f",j,(float)j/n);printf("\n");}}void about()/*关于设计*/{clrscr();printf("\n\n\n\n\n\n");printf("\t\t\b*********************ABOUT************************\n") ;printf("\t\t\b*\tThe Student Score Manage System\t\t*\n");printf("\t\t\b*\t\t\t\t\t\t*\n");printf("\t\t\b*\t\t\b llrsnake \t\t\t*\n");printf("\t\t\b*\t\t\b 1000000001\t\t\t*\n");printf("\t\t\b**************************************************\n"); printf("\n\t\t\tPress any key to return...");getch();}student *load()/*载入*/{FILE *fp;student *head=NULL,*p1,*p2;char c[10];printf("please enter the file name:\n");scanf("%s",c);if((fp=fopen(c,"rb"))==NULL){printf("Can not open the file %s\n",c); return head;}printf("loading...\n");n=0;fgets(cipher,11,fp);p1=(student *)malloc(LEN);if(p1==NULL){printf("Out of memory!\n");return(head);}head=p1;while(!feof(fp)){if(fread(p1,LEN,1,fp)!=1)break;n++;p1->next=(student *)malloc(LEN);if(!p1->next){printf("Out of memory!\n");return (head);}p2=p1;p1=p1->next;}p2->next=NULL;fclose(fp);printf("load successfuly!\n");return head;}void save(student *head) /*保存*/{FILE *fp;student *p;char str[10];int i;printf("please enter the file name:\n");scanf("%s",str);if((fp=fopen(str,"wb"))==NULL){printf("Cannot open file!\n");return;}printf("Saving...\n");for(i=0;i<10;i++)fputc(cipher[i],fp);for(p=head;p!=NULL;p=p->next)if(fwrite(p,LEN,1,fp)!=1)printf("file save error!\n");printf("save successfully!\n");fclose(fp);}int cipher_check()/*密码检测*/{char c[11];int i,flag;for(i=0;(c[i]=getch())!='\r'&&i<11;){if(c[i]==8){if(i==0) continue;else {printf("\b");clreol();i--;continue;} }if(i==10) continue;printf("*");i++;}c[i]='\0';printf("\n");flag=!strcmp(c,cipher);return flag;}void set_up_cipher()/*设立密码*/{int i=0,flag;char c;printf("\nPlease input the password:\n"); while((cipher[i]=getch())!='\r'&&i<11){if(cipher[i]==8){if(i==0) continue;else{i--;printf("\b");clreol();continue;}if(i==10) continue;printf("*");i++;}cipher[i]='\0';printf("\nplease input the password again:\n"); flag=cipher_check(cipher);if(flag==0){printf("password set up fail\n");cipher[0]='\0';}if(flag==1)printf("\npassword set up success!\n");}void enter_record(student *p) /*输入信息*/{int i;p->flag=1;printf("name:");scanf("%s",p->name);for(i=0;i<N-2;i++){printf("score%d=",i+1);for(;;){scanf("%d",(p->score)+i);if(p->score[i]>100||p->score[i]<0)printf("Wrong score,enter again:");else break;}count(p->score);}}void count(int *p) /*计算总成绩及平均成绩*/{int i,sum=0,aver;for(i=0;i<N-2;i++)sum+=p[i];aver=(int)sum/i;p[N-2]=sum;p[N-1]=aver;}void print(student *p) /*输出结点*/printf("%5ld %-6s",p->num,p->name);for(i=0;i<N;i++)printf("%7d",p->score[i]);printf("\n");}void print_title()/*输出标题*/{printf("\n********************************************************** **********************\n");printf("number name score1 score2 score3 total aver\n");}。
页眉顶层数据流图教师信息、学生信息、课程信息课程信息、成绩信息管理员成绩管理系统教师信息、学生信息、课程信息成绩选信课息用户账户密码记录 2.管理学生1.管理教师教学师生信信息息记记录管理课程3.录课程信息、成绩信息教师学生0层数据流图课程信 4.开设课程息记录教学生成绩记录师开课 5.选课记录 6.成绩处理1层数据流图页脚页眉增加教师查询教师 1.11.2信息信息工号姓名工号密码姓名类别教师信息记录用户账户密码记录工号删除教师 1.4工号姓名工号姓名 1.3 密码更新教师信息信息工号页脚页眉用户账户密码记录增加学生 2.12.2查询教师信息信息学号姓名专业班级学生信息记录学号姓名密码类别学号删除教师 2.4 学号姓名专业班级学号姓名专业班级更新学生 2.3信息密码信息学号页脚页眉增加课程 3.13.2查询课程信息课序号课程名课程学分教学班号课序号上课地点课程名上课时间学分课程容量已选人数任课教师课程信息记录教师开设课程课序号课程名课程学分教学班号上课地点上课时间课程容量已选人数任课教师 4.1选择要开设的课程课程号 4.2更新所开设的课程信息课序号课程名课程学分教学班号上课地点课序号删除课程 3.4信息上课时间课程容量已选人数任课教师更新课程 3.3信息教师开课记录信息页脚页眉课程信息记录页脚页眉学生信息记学学学生姓课序课程课程课程信息记学生成绩记课程授课教师工学学选择课查5.5.选课学生学课程任课教授课教师教学班上课时删除选5.上课地点教师开课记录页脚页眉学号课程号平时成绩期末成绩最终成绩学生成绩记录学分绩点查询成绩 6.5名次学号学号课序号课序号期末成绩最终成绩绩点最终提交 6.3课序号工号平均分最低分最高分输入平时 6.16.4汇总平均分最高分最低分暂时提交6.2成绩学号工号课序号最终成绩名次教师开课记录页脚。
学绩信息管理系统学绩信息管理系统文档1. 系统简介1.1 目的和背景1.2 功能概述2. 用户需求分析2.1 学生用户需求- 查看个人成绩记录及排名情况。
- 提交作业、报告等课程相关文件。
- 查询选修课程信息并进行选课操作。
2.2 教师用户需求- 录入学绩,并计算平均分与班级排名。
- 发布作业、考试安排以及其他通知事项给学生。
3.系统设计与架构3.1数据库设计-设计数据库表结构,包括:学生表、教师表、科目表等。
3-2功能模块划分-划定各个子模块职责范围,如登录认证模块, 成绩录入/查询模块, 文件模块等。
4.详细功能描述4-1登陆注册–实现不同角色(管理员/老师/學生)登錄註冊功能,包含用戶驗證與權限控制部分。
4-2成績查詢–允许學生根据条件查询个人成绩,并显示排名情况。
4-3成績录入–允许教师输入学绩,系统自动计算平均分与班级排名,并提供相应的错误提示功能。
4-4 文件- 学生可以提交作业、报告等文件;老师可发布课程资料给学生。
5. 系统测试5.1 单元测试- 对每个模块进行单元测试以验证其正确性和稳定性。
6.部署与运行环境6-1硬件需求-列出服务器及客户端所需要的硬件配置要求。
6-2软件需求-列出操作系統, 数据库管理系统和其他必须安装在服务器上的软体需求。
7.附件8.法律名词及注释:- GDPR(General Data Protection Regulation):欧洲通用数据保护条例,是为了加强对于公民隐私权利和信息处理规范而制定的一项监管政策。
- COPPA (Children's Online Privacy Protection Act):儿童在线隐私保护法案,在美国旨在增强对13岁以下孩子们网络活动中收集到他们身份信息使用者责任意识方面做了规定。
- FERPA (Family Educational Rights and Privacy Act):家庭教育权利和隐私法案,是美国一项旨在保护学生个人信息的联邦法律。
UML学生成绩管理系统简介UML学生成绩管理系统是一个用于管理学生的学业成绩的系统。
该系统可以帮助学校或教育机构轻松管理学生的课程成绩和学术表现。
功能特点1.学生管理:系统可以存储学生的个人信息,包括姓名、年龄、性别和联系方式。
2.课程管理:系统可以管理学生的课程信息,包括课程名称、授课教师、学分和上课时间。
3.成绩管理:系统可以记录学生的考试成绩和平时表现,并生成成绩报告。
4.统计分析:系统可以根据学生的成绩数据进行统计分析,包括平均成绩、最高成绩和最低成绩等。
5.导出报告:系统可以将学生的成绩报告导出为Excel或PDF格式,方便学校和教师查看和分析学生成绩。
UML类图下面是UML类图表示了学生成绩管理系统的设计和关系。
```plantuml @startumlclass Student { - id: int - name: string - age: int - gender: string - contact: string + getID(): int + getName(): string + getAge(): int + getGender(): string + getContact(): string + setID(id: int): void + setName(name: string): void + setAge(age: int): void + setGender(gender: string): void +setContact(contact: string): void }class Course { - id: int - name: string - teacher: string - credit: int - schedule: string + getID(): int + getName(): string + getTeacher(): string + getCredit(): int + getSchedule(): string + setID(id: int): void + setName(name: string): void + setTeacher(teacher: string): void + setCredit(credit: int): void + setSchedule(schedule: string): void }class Grade { - student: Student - course: Course - score: int + getStudent(): Student + getCourse(): Course + getScore(): int + setStudent(student: Student): void + setCourse(course: Course): void + setScore(score: int): void }class GradeReport { - grades: List + addGrade(grade: Grade): void + removeGrade(grade: Grade): void + getAverageScore(): double + getMaxScore(): int + getMinScore(): int + generateReport(): void }Student。
学生成绩管理系统学生成绩管理系统是一个用于管理、记录和分析学生学习成绩的工具。
它可以帮助学校、教师和家长更好地了解学生的学习情况,提供个性化的教学指导和辅导。
本文将介绍学生成绩管理系统的功能、优势以及在实际应用中的作用。
一、功能介绍1. 学生信息管理:学生成绩管理系统可以存储和管理学生的个人信息,包括姓名、班级、学号、家庭联系方式等。
教师和学校可以通过系统快速查找和更新学生信息。
2. 成绩录入与查询:学生的各科成绩可以通过系统进行录入和查询。
教师可以根据学科、班级或学生姓名进行成绩查询,及时了解学生的学习情况。
3. 成绩分析与报告:学生成绩管理系统可以根据学生的成绩数据生成详细的成绩分析报告。
通过分析学生在不同科目、不同时间段的表现,教师可以更好地评估学生的学习水平和进步空间,及时调整教学内容和方法。
4. 学习计划和目标设定:学生成绩管理系统可以帮助学校和教师制定学生个性化的学习计划和目标。
根据学生的历史成绩和评估结果,系统可以推荐适合学生的学习资源和教材,提供针对性的学习建议。
5. 家校互动平台:学生成绩管理系统还提供了家校互动的功能,家长可以通过系统查看学生的成绩和评语,与教师进行实时沟通。
教师可以向家长发布通知、作业、考试安排等信息,促进学校和家庭的紧密合作。
二、系统优势1. 提高工作效率:学生成绩管理系统可以自动化完成学生信息管理、成绩录入和查询等繁琐的工作,节省教师和学校的时间和精力。
2. 数据准确性:通过使用学生成绩管理系统,可以避免人为录入错误和纰漏,确保学生成绩数据的准确性和完整性。
3. 个性化分析:学生成绩管理系统提供了丰富的成绩分析功能,可以根据学生的特点和需求进行个性化评估和辅导,促进学生全面发展。
4. 促进教学改进:通过对学生成绩进行全面分析,教师可以及时发现学生的薄弱环节和问题,采取有针对性的教学改进措施,提高教学效果。
5. 加强家校联系:学生成绩管理系统提供了家校互动平台,方便教师和家长之间及时沟通,共同关注学生的学习情况和发展。
学生成绩管理系统简介学生成绩管理系统是一种用于管理学生的学业成绩和相关信息的软件系统。
它可以帮助学校、教师和学生有效地管理和查询学生的成绩,提供全面的成绩分析和统计功能,促进教学质量的提高。
功能学生成绩管理系统通常具有以下核心功能:1.学生信息管理:包括学生的基本信息、课程注册、班级信息等。
2.成绩录入:教师可以登录系统,录入学生成绩,并进行相应的成绩审核和修改。
3.成绩查询:学生、教师和学校管理者均可通过系统查询学生成绩,可以按照学生、班级、课程等维度进行灵活查询。
4.成绩统计与分析:系统可以对成绩数据进行统计和分析,生成各类成绩报告和分析图表,为教师和学校提供决策依据。
5.成绩排名:系统可以根据学生成绩进行排名,可以按照总分、班级、课程等维度进行排名。
6.数据导入导出:系统可以支持将学生成绩数据导入导出到Excel、CSV等格式,方便学校的数据管理。
优势学生成绩管理系统的应用带来诸多优势:1.提高工作效率:通过系统自动化处理和统计成绩数据,节省了大量的人力和时间成本。
2.提供准确的数据:系统可以准确地计算和记录学生成绩,避免了人工计算和录入带来的错误。
3.提供个性化服务:学生成绩管理系统可以根据学生的不同需求提供个性化的信息查询和分析功能,满足学生个性化的学习需求。
4.提供全面的分析和决策支持:系统可以生成各类成绩报告和分析图表,帮助教师和学校进行成绩分析和决策。
5.提高教学质量:通过系统对学生成绩进行全方位的管理和分析,有助于教师了解学生的学习状况,及时调整教学方法,提高教学质量。
使用场景学生成绩管理系统适用于各类学校、教育机构以及在线教育平台的学生成绩管理需求。
以下是几个典型的使用场景:1.学校管理者可以通过系统了解学校整体的学生成绩情况,进行综合分析和决策。
2.教师可以通过系统录入学生成绩、排名、查询历史成绩等,方便管理学生成绩和进行个性化教学。
3.学生可以通过系统查询自己的成绩、查看排名等,及时了解自己的学习状况。
附件二【学生用】西北农林科技大学信息工程学院面向对象程序设计实习报告题目:平时成绩管理系统学号姓名专业班级指导教师实践日期2013年2月25日-3月8日目录一、综合训练目的与要求 (1)二、综合训练任务 (1)三、总体设计 (2)四、详细设计说明 (4)五、调试与测试 (4)六、实习日志 (22)七、实习总结 (23)八、附录:核心代码清单 (24)一、综合训练目的与要求在经过一个学期的面向对象程序设计之后,为了让学生掌握面向对象程序设计的基本方法,加深对面向对象的思想,包括封装性,继承性,多态性的理解,此次程序设计综合运用所学知识解决实际问题,将课堂的书本知识有效的在程序中体现出来,让学生更理解C++功能之强大,进一步让学生对面向对象的方法以及C++的编程思想有较好了解和认识,通过对题目设计的实战掌握应用软件的分析方法和工程设计方法,提高学生设计的能力和综合知识的运用能力,此外,此次设计培养团队协作开发、设计、调试、运行程序的能力,激发学生较强的自学兴趣,锻炼学生之间以及学生与老师之间的沟通能力,培养学生之间的合作精神,让彼此更好的认识到合作的重要性,使学生在今后的学习中加强对合作精神的培养。
1. 巩固和加深学生对C++语言、数据结构课程的基本知识的理解和掌握;2. 掌握C++语言编程和程序调试的基本技能;3. 利用C++语言进行基本的软件设计;4. 掌握书写程序设计说明文档的能力;5. 提高运用C++语言、数据结构解决实际问题的能力。
二、综合训练任务1.培养学生自学的能力,这次实习虽然我们没有用QT做出来界面,但是经过几天的研究和理解基本理解了一些简单的文本存储和文本操作。
2.培养学生养成充分利用参考书和查询手册的能力,培养学生自己独立思考,深入研究,分析问题、解决问题的能力。
3.巩固和加深对程序设计课程的理解,提高综合运用课程所学知识的能力。
本次我们实习的平时成绩管理系统具体内容:4.用文件读取及链表操作实现不同用户(教师、学生、学院管理员和学校管理员)的密码登录。
5.教师用户:查看、修改及查找这位老师所教学生各科平时成绩(考勤情况、作业情况、考勤加分情况及请假制度)。
6.学生用户:查看自己的个人信息及各科平时成绩(考勤情况、作业情况、考勤加分情况及请假制度)。
7.学院管理员用户:查看、增加、修改、删除、查找学生及教师信息。
8.学校管理员用户:查看、增加、修改、删除、查找学院管理员信息。
三、总体设计我们这一组选的题目是“平时成绩管理系统”,开始不知道该怎么着手做,慢慢的在网上找到了一些类似的范围我参考了一下,大概一开始就是要做个登录界面,然手是是主窗口,主窗口上面要显示的是“平时成绩管理系统”的一些操作。
在我们的题目设计中,我们用了4个类,list1,list2,list3,list4,这4个类分别用来完成学校管理员对学院管理员的操作、学院管理员对教师的操作、学院管理员对学生的操作、教师对学生的操作。
另外,我们还有学生查分操作。
下面流程图是上文操作的流程图:图1查看信息及总评学校管理员登录学院管理员登录 教 师 登 录 用户登录学生 登 录 查看学生成绩修改学生成绩查找学生信息图2查找学生信息 修改学生信息 删除教师信息新增教师信息 查找教师信息 修改教师信息 查看教师信息 教师信息操作学院管理员登录系教师信息操作 查看学生信息 新增学生信息删除学生信息学校管理员登录查看学院管理员信息 修改学院管理员信息 查找学院管理员信息 删除学院管理员信息 新增学院管理员信息图3四、详细设计说明由于我们这次实习是两个人共同完成的,所以我只把自己做的那一部分的详细设计说明列出来。
我只做了学生查分子系统与学院管理员子系统,下面是这两个子系统的流程图:学生登录子系统流程图:学生登录否是否找到该学生是输出学生的基本信息及平时成绩图4学院管理员登录子系统流程图:其中学生信息操作与教师信息操作类似。
按姓名查找学院管理员登录 是否登录正确 是否 请选择1或者2教师信息操作学生信息操作 查找教师信息 查看教师信息修改教师信息 删除教师信息 增加教师信息 输出所有教师信息输出要修改的教师学工号输出要删除的教师学工号输出要新增的教师学工号按学工号查找按院系查找输出查找到的学院管理员信息 其它是是输出修改后所有教师信息是输出删除后所有教师信息是是图5五、调试与测试在调试与测试阶段,遇到很多问题,因为程序的功能有点多,所以很多时候就会出现界面返回错误。
虽然我们的程序最后没有用MFC或者QT做出来,但是我们已经做出了努力,这样子就不会后悔。
不过,以后还是要在这方面下苦功夫。
(1)Qt中用户名和密码在文本查找的问题见附录一(2)进入不同人员登陆界面图6(3)进入学生登录界面及登录后学生查看自己的个人信息及平时成绩图7图8(4)进入学院管理员登录界面图9①4-1学院管理员登陆成功后进入学院管理员选择页面<1>学院管理员对教师信息操作图101.学院管理员对教师的操作页面1)学院管理员查看教师信息图11图122)学院管理员修改教师信息及修改后文件中的信息图13图14图15图16 3)学院管理员查找教师信息(分为三类查找)图17按姓名查找图18图19按学工号查找图20图21按专业查找图22图234)学院管理员新增教师信息及新增后文件中的信息图24图25图265)学院管理员删除教师信息及删除后文件中的信息图27图28图29 <2>学院管理员对学生信息操作图30 2.学院管理员对学生的操作页面1)学院管理员查看学生信息图31图322)学院管理员修改学生信息及修改后文件中的信息图33图34图353)学院管理员查找学生信息(分为三种查找方式)图36按姓名查找图37图38 按学号查找图39图40按专业查找图41图424)学院管理员删除学生信息及删除后文件中的信息图43图44图455)学院管理员新增学生信息及新增后文件中的信息图46图47图48(5)其他调试问题做完了以上工作我们的学生平时成绩管理系统就差不多完成了。
接下来的任务就是调试各种信息确保在答辩的时候不会出错,最终确定我们的成果。
六、实习日志2013年2月25日星期一今天是实习开始的第一天,这些天我们刚开始慢慢理解自己所选题目所要实现的一些功能,制定自己的解决方案,并且写好实施计划书。
我们选择的题目是《学生平时成绩管理系统》,开始的时候我是真的不知道该怎么去做,只是想尽量用自己所学的知识尽量把我们自己的想法都通过我们的软件表现出来。
2013年2月26日星期二实习的第二天,有了思路,但是思路很模糊。
又讨论了一上午,终于有了一个比较清晰的思路可以用来编程。
然而,编程一开始,就在思考是用VC++6.0还是code blocks,讨论了一会,最后决定用code blocks,因为我们对VC++6.0不是很熟悉,虽然VC++6.0中的MFC用来做界面很好,但是为了先做出黑框,所以开始用code blocks编程。
2013年2月27日星期三实习的第三天。
今天忙了一天,终于编出了程序的二分之一,设计了两个类,实现了学校管理员对学院管理员的一些基本操作功能,以及学院管理员对教师的一些基本操作功能。
2013年2月28日星期四今天进行剩下的工作,设计了学生节点和另两个类,四个类中有一个类继承了另一个类。
这样子,我们用到了类的包含与继承,符合这次实习的目的与要求。
虽然中间很多小细节我们两个人会有意见分歧的时候,但是这几天,我们懂得了团队合作的重要性。
2013年2月29日星期五虽然我们的程序用code blocks运行出来了,但是我们想用MFC或者QT做出界面,这样子的话,比小黑框好看多了,因为我和我的搭档对QT和MFC都不熟悉,但是我还是想尝试着做着界面,所以我开始自己摸索着用MFC做界面。
周末也打算利用时间看看MFC和QT。
2013年3月4日星期一上星期五一天的时间我一直在用MFC进行界面的制作,但是MFC中一些专业术语实在是太难理解了,昨天尝试了一天,也只是会制作了一些MFC基本的界面,里面的函数一点都不懂,所以今天就开始尝试QT,希望这样可以编写出程序。
所以今天开始QT,中途因为不知道QT有记忆功能,编错了没办法我就又重新开始了好几遍。
2013年3月5日星期二用QT做界面,前面几张窗口做起来很简单,但是两张窗口连接起来的时候,又遇到了问题,在网上查看了教程以后,终于懂得了怎么做。
但是后来又遇到了一个问题,就是我们登陆时所用的用户名和密码,需要在文件中进行查找,看文件中是否存在。
最终花了一天的时间,终于自己弄出来了文件的读写操作。
2013年3月6日星期三今天上午测试程序的时候,偶然发现我们的程序存在一点漏洞,因为我们在实施计划书中写到了要做的是各科的平时成绩,结果程序编出来以后,没有这项功能,所有我们又重新整理思路,在原有的基础上设计出了能够进行教师所教科目的不同,查看不同学生的功能。
因为牵一发而动全身的缘故,所以我们要对程序进行从头的改变,费了一天的时间。
2013年3月7日星期四这一天可以说是最繁忙的一天,因为这是答辩的前一天,下午胡老师来和我们说明天答辩时要注意的事项,突然我们很多人就慌了,因为还有很多人程序还不够完善,有的是界面没有完成,所以晚上很多人又在机房做到很晚。
晚上我继续在用QT做界面,做了一晚上,因为没学过QT,所以最后做了一半,只实现了一些基本的功能。
2013年3月8日星期五今天是答辩的一天,也是实习的最后一天。
整个上午都是很紧张的。
尤其是在看了前面的几个同学演示与答辩都很好,但是老师的问题有时候会问住她们,就感觉是不是我们也做的不够好。
答辩完成后,虽然感觉自己的答辩不是很好,语言因为紧张而不够流畅,而且原本准备好的很多东西也没来得及展示。
虽然这次实习自己做的程序功能不够强大,而且也不细致化,没有强大的MFC做界面,但是通过这次实习,我明白了很多东西,以后必须好好在编程这方面下苦力学习。
七、实习总结在此次实习中我明白了,在做一个系统前先要认真的构思,根据自己需要完成的功能,进行模块划分,添加控件,在编程;变量先定义,在进行使用,注意的是初始化函数,代码书写要规范,一定要按层次的结构书写,注意适当添加注释,对于函数,变量进行说明。
开始的时候我们也没有想这个软件多么复杂,就是按照自己的想法逐一实现软件的功能而已,后来在慢慢写的过程中发现自己在开始写软件的时候想的还是太少了,最后很多内容都是临时想起来然后查资料又加上去的。
我想在以后设计软件的时候还是要多多的思考,尽量在写软件之前把可能用到的功能和内容都考虑完全了之后在进行设计,这样就算以后再添加什么内容相对来说也会随心一点,不会出现那么多的错误。
这次实习最大的收获就是学会了界面设计的基本思路,虽然最后我们还是没有做出来界面,但是我知道了很多东西是要一个综合的过程的,没有综合自己永远不会进步,总之,只有自己想不到的,没有自己做不到的,这是我实习下来的一点想法,因为,在实习过程中我们遇到的很多问题,在我的努力下,都得到的解决办法。