学生成绩信息管理系统
学生成绩管理系统数据流程图及数据字典
学生成绩管理系统数据流程图及数据字典一、数据流程图学生成绩管理系统是一个用于管理学生的课程成绩的系统。
下面是该系统的数据流程图,展示了数据在系统中的流动和处理过程。
1. 学生信息管理流程:- 输入:学生信息(学生姓名、学号、性别、年级等)- 处理:将学生信息存储到学生信息表中- 输出:无2. 课程信息管理流程:- 输入:课程信息(课程名称、课程编号、学分等)- 处理:将课程信息存储到课程信息表中- 输出:无3. 成绩录入流程:- 输入:学生课程成绩信息(学号、课程编号、成绩)- 处理:将成绩信息存储到成绩表中- 输出:无4. 成绩查询流程:- 输入:学号- 处理:根据学号在学生信息表中查找学生姓名,并在成绩表中查询该学生的所有成绩信息- 输出:学生姓名及其对应的成绩信息5. 成绩统计流程:- 输入:课程编号- 处理:根据课程编号在课程信息表中查找课程名称,并在成绩表中统计该课程的平均成绩、最高成绩和最低成绩- 输出:课程名称及其对应的平均成绩、最高成绩和最低成绩二、数据字典数据字典是对系统中使用的数据元素进行定义和描述的文档。
下面是学生成绩管理系统的数据字典,包含了系统中使用的各个数据元素及其属性。
1. 学生信息表(StudentInfo):- 学号(StudentID):学生的惟一标识符,数据类型为整数- 学生姓名(StudentName):学生的姓名,数据类型为字符串- 性别(Gender):学生的性别,数据类型为字符串- 年级(Grade):学生所在的年级,数据类型为字符串2. 课程信息表(CourseInfo):- 课程编号(CourseID):课程的惟一标识符,数据类型为整数- 课程名称(CourseName):课程的名称,数据类型为字符串- 学分(Credit):课程的学分,数据类型为浮点数3. 成绩表(Score):- 学号(StudentID):学生的惟一标识符,数据类型为整数- 课程编号(CourseID):课程的惟一标识符,数据类型为整数- 成绩(Grade):学生在该课程中的成绩,数据类型为浮点数通过以上的数据流程图和数据字典,学生成绩管理系统可以实现学生信息的录入和管理、课程信息的录入和管理、成绩的录入、查询和统计等功能。
学生成绩管理系统(详细操作过程)
学生成绩管理系统我将把我的实现步骤完整的写出来,我是在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()中被调用,即当用户进入系统后使“进入系统”菜单项不可用,并根据用户类型使相应菜单可用。
学生成绩管理系统
“学生学习成绩管理系统”用于对学生学习成绩数据文件的新文件创建和老文件管理,并可以进行密码设置。
具体要求实现的功能如下: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");}。
学生成绩信息管理系统
学绩信息管理系统学绩信息管理系统文档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):家庭教育权利和隐私法案,是美国一项旨在保护学生个人信息的联邦法律。
学生成绩管理系统
学生成绩管理系统学生成绩管理系统是一个用于管理、记录和分析学生学习成绩的工具。
它可以帮助学校、教师和家长更好地了解学生的学习情况,提供个性化的教学指导和辅导。
本文将介绍学生成绩管理系统的功能、优势以及在实际应用中的作用。
一、功能介绍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.学生可以通过系统查询自己的成绩、查看排名等,及时了解自己的学习状况。
学生成绩信息管理系统
题目:学生成绩信息管理系统用c语言实现学生管理系统,每个学生的信息包括:学号、姓名、性别、平时成绩、期末成绩。
系统能够完成学生信息的查询、更新、插入、删除、排序功能。
1、系统以菜单方式工作;2、学生信息录入功能(学生信息用文件保存)--输入;3、学生信息按条件查询功能—算法;●按学号查询●按姓名查询●按性别查询●按平时成绩查询●按期末成绩查询4、学生信息的删除与修改。
流程图:图1 函数功能模块图输入输出的要求(1)等候用户输入时,给出足够的提示信息,如:选择1,输入学生信息、选择2,查询学生信息。
(2)对输入值的类型,大小范围,字符串长度等,进行检查,对不合法的输入值给出出错信息。
(3)对删除数据给出方式,让用户进行确认删除。
1.概要设计1.抽象数据类型定义struct Student//创建结构体{………………………………};2.系统功能模块划分与设计(系统功能模块图)录入学生信息模块:输入1,判断学生信息是否存在,不存在输入1,继续上次输入,判断学生信息是否存在,运行结束。
输入2,判断学生信息是否存在,不存在输入2,清除数据重新输入,运行结束。
查询学生信息模块:查询学生信息,请输入选择查询方式。
输入1,按姓名查找学生信息输入2,按学号查找学生信息输入3,按性别查找学生信息输入4,按平时成绩查找学生信息输入5,按期末成绩查找学生信息运行结束删除学生信息模块:首先使用查询功能查询出需要修改/删除的记录,然后进行修改/删除操作无学生信息!请选项删除方式。
输入1,按照姓名删除输入2,按照学号删除运行结束修改,输出,排序学生信息输入4,修改学生信息,请输入需要修改的学生信息输入5,按姓名,成绩,平时成绩,期末成绩输出学生成绩。
输入6,将学生信息进行排序。
运行结束2.详细设计1、数据类型的定义struct Student//创建结构体{char num[20]; //学号char name[20]; //姓名char sex[5]; //性别int score; //平时成绩int QiMoscore; //期末成绩struct Student *next; //动态链表连接下一个结构体};2、主要模块的算法描述菜单模块通过while语句给出信息提示;清屏;绘制菜单(包含输入,查询,删除,修改,输出,排序);提示菜单选择并读入到变量;根据读入变量的值调用不同的模块函数;信息录入模块打开文件While(){ 清屏;按照提示输入各种信息;While显示各种信息;通过选择1.确认并继续 2.填写 3.修改 4.确认并返回选择四种功能;}}信息查询While(){ 通过菜单式的选择是学号查询还是姓名printf("\n----------请选择查询方式----------");printf("\n 1.按姓名查询");printf("\n 2.按学号查询");printf("\n 3.按性别查询");printf("\n 4.按平时成绩查询");printf("\n 2.按期末成绩查询");printf("\n 3.返回主菜单");printf("\n****************************\n");}如果选择学号进入学号模块通过输入学号If(学号存在继续){输出学生信息}Else 输出无此学生如果选择姓名进入姓名模块If(根据比较姓名判断学生是否存在){输出学生信息}Else 输出无此学生删除模块while( 继续删除 ){提示并读入待删除的学生的学生号;显示要删除的信息}删除成功信息修改模块输入要修改学生信息的学号:If (判断是否有此学生){ 菜单形式显示要修改的项目printf("\n1.姓名 2.学号 3.性别 4.平时成绩 5. 期末成绩 \n");printf("\n输入0可返回主页面 \n");}打开文件模块struct Student *read(){struct Student *p0, *p1, *head; FILE *fp;if ( ){return NULL;}if ( ){return 0;}do{if ( ){return NULL;}if ( ){return 0;}} while ( );}排序模块int paixu(struct Student *head)while(){while(){if(){}}}}}3.使用说明及编程体会使用说明该程序可以实现学生管理系统的信息排序、查询、更新、插入和删除。
学生成绩管理系统
4 可以引入更多的教学和管理功能:如在 线学习、教学评估等,更好地服务于教 育教学
-
THANK YOU
ENGLISH
可爱/简约/卡通
学生成绩管理系统
-
1
系统功能2系统流程来自3系统要求4
系统实现
5
系统未来发展
学生成绩管理系统
1
学生成绩管理系统是一个用于管理学生成绩的 计算机程序,通常用于学校或教育机构
2
这个系统可以记录每个学生的个人信息和成绩,
包括学生姓名、学号、班级、各科成绩等
3
以下是一个简单的学生成绩管理系统的示例
系统功能
系统流程
系统流程
2.1 学生信息流程
打开系统:进入学生信息管理界面
系统流程
选择添加学生信息:输入学生姓名、学 号、班级等信息
选择编辑学生信息:输入要修改的学生 学号,修改相关信息
选择删除学生信息:输入要删除的学生 学号,删除该学生信息
退出系统
系统流程
2.2 成绩管理流程
打开系统:进入成绩管理界面 选择添加成绩:输入学生学号及各科成 绩 选择编辑成绩:输入要修改的学生学号 及要修改的科目和成绩 选择删除成绩:输入要删除的学生学号 及科目,删除该科目成绩 退出系统
坏
系统实现
系统实现
系统实现
为了实现学生成绩管理系统的各项功能,以下步骤需要被完成 确定系统的需求和功能:制定详细的需求说明书 设计系统的数据库结构和数据模型:包括学生信息、成绩信息等 开发系统的各项功能模块:包括学生信息管理、成绩管理、查询和统计等 进行系统的测试和调试:确保系统的稳定性和正确性 进行系统的用户培训和文档编写:确保用户能够正确使用系统
管理信息系统课程设计 学生成绩管理系统
管理信息系统课程设计学生成绩管理系统一、引言在当今教育领域,学生成绩管理是学校教学管理的重要组成部分。
随着学校规模的不断扩大,学生人数的日益增加,传统的手工成绩管理方式已经无法满足高效、准确、便捷的管理需求。
因此,开发一个功能齐全、操作简便的学生成绩管理系统具有重要的现实意义。
二、系统需求分析(一)功能需求1、学生信息管理能够录入、修改、查询和删除学生的基本信息,如学号、姓名、班级等。
2、课程信息管理对学校开设的课程进行管理,包括课程名称、课程代码、学分、授课教师等信息的录入、修改和查询。
3、成绩录入与修改教师能够方便地录入学生的考试成绩,并支持成绩的修改和调整。
4、成绩查询与统计学生和教师可以按照不同的条件查询成绩,如学号、课程名称等。
同时,系统能够提供成绩统计功能,如平均分、最高分、最低分等。
5、权限管理为不同的用户设置不同的权限,如学生只能查询自己的成绩,教师可以录入和修改所授课程的成绩,管理员拥有系统的最高权限。
(二)性能需求1、响应时间系统在进行数据录入、查询和统计等操作时,响应时间应控制在合理范围内,确保用户的操作能够及时得到反馈。
2、稳定性系统应具备良好的稳定性,能够在长时间运行的情况下不出现故障或数据丢失。
3、安全性保证系统数据的安全性,防止非法用户的入侵和数据的篡改。
(三)数据需求1、学生信息包括学号、姓名、性别、出生日期、班级等。
2、课程信息课程代码、课程名称、学分、授课教师等。
3、成绩信息学号、课程代码、成绩等。
三、系统设计(一)总体设计1、系统架构采用 B/S(浏览器/服务器)架构,用户通过浏览器访问系统,服务器端负责数据的处理和存储。
2、模块划分系统主要分为学生信息管理模块、课程信息管理模块、成绩管理模块、查询统计模块和权限管理模块。
(二)数据库设计1、数据库概念模型根据系统需求,设计出学生、课程、成绩等实体以及它们之间的关系。
2、数据库表结构创建学生表(Student)、课程表(Course)、成绩表(Score)等,并定义相应的字段和数据类型。
学生成绩管理系统数据库设计
学生成绩管理系统数据库设计一、引言学生成绩管理系统是现代教育系统中必不可少的一部分。
数据库作为该系统的核心组成部分,用于存储和管理学生的个人信息和学业成绩数据。
本文将介绍学生成绩管理系统数据库设计的方案,包括数据库的结构、关系和各个表的字段及其类型。
二、数据库结构学生成绩管理系统数据库包含多个表,每个表对应一个实体或关系。
以下是数据库的主要结构:1. 学生表(Student)该表存储学生的个人信息,如学生ID、姓名、年龄、性别、班级等。
表结构如下:- 学生ID(StudentID):主键,用于唯一标识学生。
- 姓名(Name):学生的姓名。
- 年龄(Age):学生的年龄。
- 性别(Gender):学生的性别。
- 班级(Class):学生所在的班级。
2. 课程表(Course)该表存储所有开设的课程信息,如课程ID、课程名称、学分等。
表结构如下:- 课程ID(CourseID):主键,用于唯一标识课程。
- 课程名称(CourseName):课程的名称。
- 学分(Credit):课程的学分。
3. 成绩表(Grade)该表存储学生的成绩信息,包括学生ID、课程ID、成绩等。
表结构如下:- 学生ID(StudentID):外键,与学生表中的学生ID相关联。
- 课程ID(CourseID):外键,与课程表中的课程ID相关联。
- 成绩(Score):学生在某一门课程中的成绩。
三、关系说明学生成绩管理系统数据库中的表之间存在以下关系:1. 学生与课程的多对多关系一个学生可以选择多门课程,而一门课程也可以被多个学生选择。
这种关系可以通过成绩表来连接学生表和课程表。
2. 学生与成绩的一对多关系一个学生可以有多门课程的成绩,而一门课程只对应一个学生的成绩。
这种关系可以通过成绩表中的学生ID字段来建立。
3. 课程与成绩的一对多关系一门课程可以有多个学生的成绩,而一个学生只对应一门课程的成绩。
这种关系可以通过成绩表中的课程ID字段来建立。
学生成绩管理系统
学⽣成绩管理系统开头:个⼈的第⼀篇博客,同时也是第⼀个完整的实战项⽬,由于经验不⾜,只能做出简单级别的当做练⼿.第⼀篇博客第⼀个项⽬⼀、开发背景:软件名称:学⽣成绩管理系统(SSMS)使⽤对象:⼤学⼆、需求分析1. 系统分析该学⽣信息管理系统涉及到学⽣、教师、学号、学⽣成绩、课程。
所有⽤户需输⼊账号、密码登录进⼊系统;管理员进⼊系统后可对学⽣、⽼师、班级、课程进⾏增删改查操作;学⽣进⼊系统,查看成绩、查看和修改⾃⼰的信息;⽼师进⼊系统后,对⾃⼰这门课程的学⽣设置课程成绩、查看和修改⾃⼰的信息,查看学⽣的信息和成绩、以及统计分析学⽣的成绩;学⽣成绩分为两种, ⼀种是考试成绩占总成绩的百分之60, ⼀种是平时成绩占总成绩的百分之40.考试成绩出来后,⽼师进⼊系统选择该次考试为学⽣登记成绩。
平时考试则是班级平时的考试,⽼师添加考试信息,登记成绩。
成绩统计分析则是针对年级统考进⾏分析,主要涉及各学科分数名次,总分名次.三、开发环境系统环境:Windows10开发⼯具:IdeaJava版本:JDK 1.8服务器:tomcat 9.0.36数据库:MySQL 8.0系统采⽤技术:Servlet+Jsp+Jdbc+jQuery+Ajax四、代码实现1、登陆界⾯ login:<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>登陆页⾯-学⽣成绩管理系统-javaweb</title><style>#cont div {text-align: center;padding: 15px;}#cont div:last-child input:first-child {margin-right: 30px;}#cont div:last-child input:first-child {margin-left: 30px;}#cont div:last-child input:first-child {margin-right: 30px;}</style></head><body><div style="margin-top: 150px"><jsp:include page="top.jsp"/><div id="cont"><%String message = (String) request.getAttribute("message");if (message!=null){%><h3 style="color: #ff0000" align="center">出错信息${message}</h3><%}%><form action="<%= request.getContextPath()%>/loginServlet?type=trueLogin" method="post"> <div><label for="userName">⽤户名:</label><input type="text" name="userName" id="userName"/></div><div><label>   密码:<input type="password" name="pwd"/></label></div><div><label> 验证码:<input type="yangzheng" name="yanzheng"/><img src="${pageContext.request.contextPath}/main/webapp/WEB-INF/img.jpg"/></label></div><div><input type="submit" value="登陆"/><input type="button" onclick="resetForm()" value="重置"/></div></form></div><jsp:include page="bottom.jsp"/></div><script>function resetForm(){document.forms[0].reset()}</script></body></html>2、登陆成功界⾯1 <%@ page contentType="text/html;charset=UTF-8" language="java" %>2 <html>3 <head>4 <title>学⽣管理-学⽣成绩管理系统-javaweb</title>5 <style>6 table {7 border-collapse: collapse;8 border-spacing: 0;9 border: 1px solid black;10 }1112 tr {13 line-height: 2;14 }1516 th, td {17 border: 1px solid black;18 padding: 0 10px;19 }2021 #cont {22 text-align: left;23 margin-left: 540px;24 margin-top: 50px;25 line-height: 1.5;26 }2728 .nav, .search, .page {29 line-height: 2;30 }31 </style>32 </head>33 <body>34 <div>35 <jsp:include page="../top.jsp"/>36 <div id="cont">37 <%-- <section class="nav">--%>38 <%-- <a href="#">学⽣管理</a>--%>39 <%-- <a href="#">成绩管理</a>--%>40 <%-- </section>--%>41 <section class="search">42 <%43 TableResult<StudentDO> tableResult = (TableResult) request.getAttribute("tableResult");4445 %>4647 <a href="<%=request.getContextPath()%>/studentServlet?type=toAdd">新增学⽣</a>48 <form method="post" action="<%=request.getContextPath()%>/studentServlet?type=toStudentManage">49 <%-- <input type="text" name="studentName" value="<%= tableResult.getStudentName()%>"/>--%>50 <!--value在没有被别⼈修改的情况下就是1,51由于不是ajax局部刷新,页⾯是整体刷新的,所以即便pageNow被就改了,查询结果出来的页⾯中的pageNow仍然还是152 -->53 <input type="hidden" name="pageNow" id="pageNow" value="1"/>54 <%-- <input type="submit" value="查询">--%>55 </form>56 </section>57 <section>58 <table>59 <thead>60 <tr>61 <th>编号</th>62 <th>姓名</th>63 <th>学号</th>64 <th>科⽬名称</th>65 <th>考勤成绩</th>66 <th>作业成绩</th>67 <th>考试成绩</th>68 <th>操作</th>6970717273 </tr>74 </thead>75 <tbody>76 <%77 List<StudentDO> data = tableResult.getData();7879for (int i = 0; i < data.size(); i++) {80 StudentDO studentDO = data.get(i);81 %>82 <tr>83 <td><%= studentDO.getId()%>84 </td>85 <td><%= studentDO.getName()%>86 </td>87 <td><%= studentDO.getNo()%>88 </td>89 <td><%= studentDO.getTask()%>90 </td>91 <td><%= studentDO.getKaoqin()%>92 </td>93 <td><%= studentDO.getZuoye()%>94 </td>95 <td><%= studentDO.getChengji()%>96 <td><a href="<%=request.getContextPath()%>/studentServlet?type=delete&id=<%= studentDO.getId()%>">删除</a>97 <a href="<%=request.getContextPath()%>/studentServlet?type=toUpdate&id=<%= studentDO.getId()%>">更新</a>98 </td>99 </tr>100 <%101 }102 %>103 </tbody>104 </table>105 <div class="page">106 <%107//只要不是第⼀页就显⽰108if (tableResult.getPageNow() != 1) {109 %>110 <a href="#" onclick="goFirst()">⾸页</a>111 <a href="#" onclick="goPre()">上⼀页</a>112 <%113 }114 %>115 <%116//只要不是最后⼀页就显⽰117if (tableResult.getPageNow() != tableResult.getPageCount()) {118 %>119 <a href="#" onclick="goNext()">下⼀页</a>120 <a href="#" onclick="goLast()">尾页</a>121 <%122 }123 %>124 <span>共<%=tableResult.getPageCount()%>页</span>125 <span>,共<%=tableResult.getTotalCount()%>条</span>126 <span>,当前是第<%=tableResult.getPageNow()%>页</span>127 </div>128 </section>129 </div>130 <jsp:include page="../bottom.jsp"/>131132 </div>133 <script>134 function goFirst() {135 document.forms[0].submit();136 }137138//上⼀页139 function goPre() {140//1、拿到当前页141 var currentPageStr = "<%=tableResult.getPageNow()%>";142 var prePage = parseInt(currentPageStr) - 1;143//2、修改搜索⾥⾯提交的pageNow144 document.getElementById("pageNow").value = prePage;145 document.forms[0].submit();146 }147 function goNext(){148//1、拿到当前页149 var currentPageStr = "<%=tableResult.getPageNow()%>";150 var nextPage = parseInt(currentPageStr) + 1;151//2、修改搜索⾥⾯提交的pageNow152 document.getElementById("pageNow").value = nextPage;153 document.forms[0].submit();154 }155//尾页156 function goLast(){157//1、拿到当尾页158 var pageCountStr = "<%=tableResult.getPageCount()%>";159//2、修改搜索⾥⾯提交的pageNow160 document.getElementById("pageNow").value = parseInt(pageCountStr);161 document.forms[0].submit();162 }163164 </script>165 </body>166 </html>成功则进⼊系统界⾯失败则进⾏提⽰⽤户名或密码验证码不正确(验证码不知道是浏览器的问题还是怎么回事就是加载不出来)3、增加学⽣<html><head><title>添加学⽣页⾯-学⽣成绩管理系统-javaweb</title><style>#cont{text-align: center;margin-top: 100px;}#cont div{padding: 15px;}</style></head><body><div><jsp:include page="../top.jsp"/><div id="cont"><form action="<%= request.getContextPath()%>/studentServlet?type=add" method="post"> <div><label>学⽣姓名:<input type="text" name="studentName" /></label></div><div><label>      学号:<input type="text" name="no"/></label></div><div><label>      科⽬:<input type="text" name="task"/></label></div><div><label>考勤成绩:<input type="text" name="kaoqin"/></label></div><div><label>作业成绩:<input type="text" name="zuoye"/></label></div><div><label>考试成绩:<input type="text" name="chengji"/></label></div><div><input type="submit" value="增加"/></div></form></div><jsp:include page="../bottom.jsp"/></div></body></html>4、更新学⽣信息<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>更新学⽣页⾯-学⽣成绩管理系统-javaweb</title><style>#cont{text-align: center;margin-top: 100px;}#cont div{padding: 15px;}</style></head><body><div><jsp:include page="../top.jsp"/><div id="cont"><form action="<%= request.getContextPath()%>/studentServlet?type=update" method="post"> <%StudentDO studentDO = (StudentDO)request.getAttribute("studentDO");%><div><label>学⽣编号:<!--disabled的不能提交,如果⽤了disabled⼜想提交,就要再加个hiddent的input来提交--> <input type="text" readonly name="studentId" value="<%= studentDO.getId()%>"/></label></div><div><label>学⽣姓名:<input type="text" name="studentName" value="${}" /></label></div><div><label>      学号:<input type="text" name="no" value="${requestScope.studentDO.no}"/></label></div><div><label>      科⽬:<input type="text" name="task" value="${studentDO.task}"/></label></div><div><label>考勤成绩:<input type="text" name="kaoqin" value="${studentDO.kaoqin}" /></label></div><div><label>作业成绩:<input type="text" name="zuoye" value="${requestScope.studentDO.zuoye}"/> </label></div><div><label>考试成绩:<input type="text" name="chengji" value="${studentDO.chengji}"/></label></div><div><input type="submit" value="更新"/></div></form></div><jsp:include page="../bottom.jsp"/></div></body></html>5、数据库设计数据库连接与⽹页与数据库的交互public class DBUtil {private static final String URL = "jdbc:mysql://localhost:3306/student_javaweb?serverTimezone=UTC&characterEncoding=utf-8"; private static final String DRIVER = "com.mysql.cj.jdbc.Driver";private static final String USER_NAME = "root";//Mysql配置时的⽤户名private static final String PWD = "123456";//密码static {try {Class.forName(DRIVER);} catch (ClassNotFoundException e) {e.printStackTrace();}}/*** 获取连接* @return*/public static Connection getConn() {try {return DriverManager.getConnection(URL, USER_NAME, PWD);} catch (SQLException e) {e.printStackTrace();}return null;}/*** 关闭结果集* @return*/public static void closeResultSet(ResultSet resultSet) {try {if (resultSet != null){resultSet.close();}} catch (SQLException e) {e.printStackTrace();}}/*** 关闭ps* @return*/public static void closePs(PreparedStatement ps) {try {if (ps != null){ps.close();}} catch (SQLException e) {e.printStackTrace();}}/*** 关闭连接* @return*/public static void closeConn(Connection conn) {try {if (conn != null){conn.close();}} catch (SQLException e) {e.printStackTrace();}}}package com.roadjava.javaweb.student.dao.imol;import com.roadjava.javaweb.student.beans.entity.AdminDO;import com.roadjava.javaweb.student.beans.entity.StudentDO;import com.roadjava.javaweb.student.beans.req.StudentRequest;import com.roadjava.javaweb.student.beans.res.TableResult;import com.roadjava.javaweb.student.dao.StudentDao;import com.roadjava.javaweb.student.util.DBUtil;import com.roadjava.javaweb.student.util.StringUtil;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;public class StudentDaoImpl implements StudentDao {@Overridepublic int addStudent(StudentDO studentDO) {Connection conn = DBUtil.getConn();if (conn == null){return 0;}PreparedStatement ps = null;StringBuilder sb = new StringBuilder();sb.append(" insert into student(name,no,task,kaoqin,zuoye,chengji) ");sb.append(" values(?,?,?,?,?,?) ");try {ps = conn.prepareStatement(sb.toString());ps.setObject(1,studentDO.getName());ps.setObject(2,studentDO.getNo());ps.setObject(3,studentDO.getTask());ps.setObject(4,studentDO.getKaoqin());ps.setObject(5,studentDO.getZuoye());ps.setObject(6,studentDO.getChengji());//打印最终执⾏的sql语句System.out.println("addStudent执⾏的sql:"+ps.toString());return ps.executeUpdate();} catch (SQLException e) {e.printStackTrace();}finally {DBUtil.closePs(ps);DBUtil.closeConn(conn);}return 0;}@Overridepublic TableResult<StudentDO> queryStudentByPage(StudentRequest studentRequest) { TableResult<StudentDO> tableResult = new TableResult<>();Connection conn = DBUtil.getConn();if (conn == null){return null;}PreparedStatement ps = null;ResultSet rs = null;//查询学⽣列表StringBuilder sb = new StringBuilder();sb.append(" select * from student ");appendWhere(studentRequest,sb);sb.append(" order by id desc limit ").append(studentRequest.getStart()).append(",").append(studentRequest.getPageSize());try {ps = conn.prepareStatement(sb.toString());if (StringUtil.isNotBlank(studentRequest.getStudentName())){ps.setObject(1,studentRequest.getStudentName());}//打印最终执⾏的sql语句System.out.println("queryStudentByPage查询学⽣的sql:"+ps.toString());rs = ps.executeQuery();List<StudentDO> list = new ArrayList<>();while (rs.next()){StudentDO studentDO = buildStudent(rs);list.add(studentDO);}tableResult.setData(list);//设置数据/*查询总条数*/sb.setLength(0);sb.append(" select count(*) from student ");appendWhere(studentRequest,sb);ps = conn.prepareStatement(sb.toString());if (StringUtil.isNotBlank(studentRequest.getStudentName())){ps.setObject(1,studentRequest.getStudentName());}//打印最终执⾏的sql语句System.out.println("queryStudentByPage查询学⽣总条数的sql:"+ps.toString()); rs = ps.executeQuery();if (rs.next()){int totalCount = rs.getInt(1);tableResult.setTotalCount(totalCount);//设置总条数}return tableResult;} catch (SQLException e) {e.printStackTrace();}finally {DBUtil.closePs(ps);DBUtil.closeConn(conn);DBUtil.closeResultSet(rs);}return null;}@Overridepublic StudentDO getStudentById(long studentId) {Connection conn = DBUtil.getConn();if (conn == null){return null;}PreparedStatement ps = null;ResultSet rs = null;StringBuilder sb = new StringBuilder();sb.append(" select * from student where id = ? ");try {ps = conn.prepareStatement(sb.toString());ps.setObject(1,studentId);//打印最终执⾏的sql语句System.out.println("getStudentById执⾏的sql:"+ps.toString());rs = ps.executeQuery();if(rs.next()){return buildStudent(rs);}} catch (SQLException e) {e.printStackTrace();}finally {DBUtil.closePs(ps);DBUtil.closeConn(conn);DBUtil.closeResultSet(rs);}return null;}@Overridepublic int updateStudent(StudentDO studentDO) {Connection conn = DBUtil.getConn();if (conn == null){return 0;}PreparedStatement ps = null;StringBuilder sb = new StringBuilder();sb.append(" update student set name=?,no=?,task=?,kaoqin=?,zuoye=?,chengji=? "); sb.append(" where id = ? ");try {ps = conn.prepareStatement(sb.toString());ps.setObject(1,studentDO.getName());ps.setObject(2,studentDO.getNo());ps.setObject(3,studentDO.getTask());ps.setObject(4,studentDO.getKaoqin());ps.setObject(5,studentDO.getZuoye());ps.setObject(6,studentDO.getChengji());ps.setObject(7,studentDO.getId());//打印最终执⾏的sql语句System.out.println("updateStudent执⾏的sql:"+ps.toString());return ps.executeUpdate();} catch (SQLException e) {e.printStackTrace();}finally {DBUtil.closePs(ps);DBUtil.closeConn(conn);}return 0;}@Overridepublic int deleteStudentById(long studentId) {Connection conn = DBUtil.getConn();if (conn == null){return 0;}PreparedStatement ps = null;StringBuilder sb = new StringBuilder();sb.append(" delete from student where id = ? ");try {ps = conn.prepareStatement(sb.toString());ps.setObject(1,studentId);//打印最终执⾏的sql语句System.out.println("deleteStudentById执⾏的sql:"+ps.toString());return ps.executeUpdate();} catch (SQLException e) {e.printStackTrace();}finally {DBUtil.closePs(ps);DBUtil.closeConn(conn);}return 0;}private StudentDO buildStudent(ResultSet rs) throws SQLException{long id = rs.getLong("id");String name = rs.getString("name");String no = rs.getString("no");String task = rs.getString("task");String kaoqin = rs.getString("kaoqin");String zuoye = rs.getString("zuoye");String chengji = rs.getString("chengji");StudentDO studentDO = new StudentDO();studentDO.setId(id);studentDO.setName(name);studentDO.setTask(task);studentDO.setNo(no);studentDO.setZuoye(zuoye);studentDO.setKaoqin(kaoqin);studentDO.setChengji(chengji);return studentDO;}private void appendWhere(StudentRequest studentRequest, StringBuilder sb) { String studentName = studentRequest.getStudentName();if(StringUtil.isNotBlank(studentName)){sb.append(" where name = ? ");}}}package com.roadjava.javaweb.student.dao.imol;import com.roadjava.javaweb.student.beans.entity.AdminDO;import com.roadjava.javaweb.student.dao.AdminDao;import com.roadjava.javaweb.student.util.DBUtil;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;public class AdminDaoImpl implements AdminDao {@Overridepublic AdminDO validateLogin(String userName) {Connection conn = DBUtil.getConn();if (conn == null){return null;}PreparedStatement ps = null;ResultSet rs = null;StringBuilder sb = new StringBuilder();sb.append(" select * from admin where user_name = ? ");try {ps = conn.prepareStatement(sb.toString());ps.setObject(1,userName);//打印最终执⾏的sql语句System.out.println("balidateLogin执⾏的sql:"+ps.toString());rs = ps.executeQuery();if(rs.next()){long id = rs.getLong("id");String pwd = rs.getString("pwd");AdminDO adminDO = new AdminDO();adminDO.setId(id);adminDO.setUser_name(userName);adminDO.setPwd(pwd);return adminDO;}} catch (SQLException e) { e.printStackTrace();}finally {DBUtil.closePs(ps);DBUtil.closeConn(conn); DBUtil.closeResultSet(rs); }return null;}}未完待续.......。
学生成绩管理系统
摘要学生成绩管理系统是为了实现学校对学生成绩管理的系统化、规范化和自动化,从而提高学校管理效率而设计的。
它完全取代了原来一直用人工管理的工作方式,避免了由于管理人员的工作疏忽以及管理质量问题所造成的各种错误,为及时、准确、高效的完成学生成绩管理提供了强有力的工具和管理手段。
学生成绩管理系统应该是一个中小型数据库管理系统,它界面美观、操作简单、安全性高,基本满足了学生成绩管理的要求。
本文中只是运用结构化方法学对这一系统的简单分析与建模,没有具体的实现过程,通过这阶段的学习与思考,能够对软件开发过程进行简单分析和判断。
关键字:成绩管理系统建模目录摘要 (1)目录 (1)1绪论 (1)1.1 设计任务 (1)1.1.1 需求说明 (1)1.1.2系统设计目标 (1)1.2 设计内容 (2)2 需求分析 (2)2.1 系统功能需求 (2)2.2 系统的性能需求 (2)2.3 系统数据要求 (3)2.4 系统业务流程分析 (3)2.4.1 班级管理业务流程图: (4)2.4.2学籍管理业务流程图: (4)2.4.3成绩管理业务流程图: (5)2.4.4课程管理业务流程图: (5)2.5数据模型的实体——联系图表示 (5)2.6 功能模型的数据流图表示 (7)2.7本章小结 (7)3 概要设计 (8)3.1 系统功能设计 (8)3.2系统模块具体划分 (9)4 详细设计 (11)5体会 (14)6参考文献 (15)1绪论1.1 设计任务1.1.1 需求说明学生成绩管理系统提供了强大的学生成绩管理管理功能,方便系统管理员对学生成绩等信息的添加、修改,打印等操作,同时一样的方面学生对自己各科成绩查询,学习的交流。
学生信息管理系统在管理学生中占有重要的地位,它关系着学生信息的基本信息,其中包括学生信息,班级信息、课程信息等。
对于学校来讲,学生信息管理系统是不可缺少的组成部分,它有效地管理学生档案,对学校学生的变动和统计起着重要的管理作用。
学生成绩管理信息系统的设计与实现
学生成绩管理信息系统的设计与实现
设计和实现学生成绩管理信息系统的步骤如下:
1. 确定系统需求:与学校、教师和学生沟通,确定系统需要支持的功能,如学生信息管理、成绩录入、成绩统计、查询和报表生成等。
2. 数据库设计:根据系统需求,设计数据库模型,包括学生信息表、课程信息表、成绩信息表等。
确定表结构、字段和关系。
3. 界面设计:设计系统的界面,包括页面布局、菜单设计和功能按钮设计等。
确保界面友好易用。
4. 系统开发:根据需求和设计,采用合适的开发工具和技术,实现系统的各个功能模块。
这可以包括使用编程语言和框架开发后端功能,使用HTML、CSS和JavaScript开发前端界面等。
5. 数据录入功能:实现学生信息录入和成绩录入功能,确保数据的准确性和完整性。
6. 数据统计和查询功能:实现成绩统计和查询功能,包括通过不同的维度进行统计和查询,如按学生、课程、班级等。
7. 报表生成功能:实现生成成绩报表的功能,可以包括生成PDF或Excel格式的报表,并支持打印和导出功能。
8. 安全和权限控制:确保系统的安全性,包括对数据的访问进行权限控制,确保只有授权用户才能访问和操作相关数据。
9. 测试和优化:对系统进行测试,确保功能正常。
同时进行性能优化,确保系统能够快速响应。
10. 上线和维护:将系统部署到服务器上,确保系统稳定运行。
定期进行系统维护和更新,确保系统的可用性和功能的持续改进。
以上是学生成绩管理信息系统的设计和实现的基本步骤,具体的实现过程还需要根据具体情况进行调整和补充。
学生成绩管理系统
学绩管理系统:让教育管理更高效、更精准一、系统概述1. 自动化成绩录入与计算,减少人工操作失误;2. 便捷的成绩查询,让教师、学生及家长随时掌握学业情况;3. 多维度成绩分析,助力教育教学改革;4. 安全可靠的数据存储,保障学生隐私。
二、核心功能与特点1. 成绩录入与修改系统支持多种成绩录入方式,包括批量导入、手工输入等,以满足不同场景的需求。
在成绩录入过程中,系统会自动校验数据,确保成绩的准确性。
若需修改成绩,教师可轻松进行操作,同时系统会记录修改日志,保障成绩的公正性。
2. 成绩查询与导出学生、家长和教师可通过系统快速查询个人或班级成绩,支持按科目、时间段等条件筛选。
系统还提供成绩导出功能,方便用户将成绩数据导出为Excel、PDF等格式,便于打印和分享。
3. 成绩分析与报告系统可根据成绩数据丰富的统计分析图表,如成绩分布、排名、进步情况等,帮助教师了解班级整体学习状况,为学生制定个性化辅导方案。
系统还能定期成绩报告,为教育教学决策提供数据支持。
4. 权限管理与隐私保护学绩管理系统采用角色权限管理,确保不同用户只能访问相应权限范围内的数据。
系统严格遵循信息安全相关规定,对敏感数据进行加密处理,保障学生隐私不被泄露。
三、应用场景1. 教师端:教师可通过系统快速完成成绩管理任务,减轻工作负担,有更多精力投入到教学研究中。
2. 学生端:学生可随时查看自己的成绩,了解自己的学习进度,激发学习积极性,制定合适的学习计划。
3. 家长端:家长可以实时了解孩子的学业情况,加强与学校的沟通,共同促进孩子成长。
4. 学校管理层:通过系统提供的成绩数据分析,学校管理层可以全面掌握教学质量,为教育改革提供决策依据。
四、实施与支持1. 专业的技术团队:为学校提供系统安装、培训、维护等全方位服务;2. 完善的售后服务:及时解决用户在使用过程中遇到的问题,确保系统稳定运行;3. 持续的更新优化:根据用户需求,不断优化系统功能,提升用户体验。
大学生成绩管理信息系统
一、成绩管理信息系统规划学生成绩是高校人才培养计划的重要组成部分,是实现人才培养目标、培养学生科研能力与创新思维、检验学生综合素质与实践能力的重要手段与综合性实践教学环节。
而笔者所在学院多采用半手工管理学生成绩的方式,所以有必要开发学生成绩管理系统来对学生成绩档案进行数字化管理。
既可减轻学院教职员工工作压力,比较系统地对教务、教学上的各项服务和信息进行管理,又可加快成绩查询速度、加强成绩管理,跟上国家各部门关于信息化的步伐,使各项管理更加规范化。
正是针对上述问题,本论文对学生成绩管理系统的开发过程进行了较为详细的论述。
本系统是以大学生成绩管理信息系统为开发内容的管理信息系统,讲述了除系统实施外的全部内容,报告分包括在内的部分。
1、系统名称:大学生成绩管理信息系统2、系统开发背景:当今社会计算机的应用已深入到社会生活的各个方面,而其在拥有众多21世纪国家和社会顶梁柱的大学更是不可缺少的。
而随着计算机技术的发展的计算机人才的大量涌现计算机在信息管理方面的优势逐渐凸现出来,并开始大量应用于各层次的信息管理服务与实践中。
与此同时,大量管理信息系统软件不断涌现,且不断升级与改进。
大学生成绩管理是一项繁杂、琐碎的事务,同时其管理又与学生学籍管理、学生基本信息管理、教务系统等联系密切,它涉及到对学生的奖惩以及找工作,对教师的教学评估的重要事宜,因此大学生成绩管理的水平的重要性可见一斑。
应用大学生成绩管理信息系统来进行管理必定会大大提高管理的速度、实效、安全性、准确性、完整性、保密性。
本系统主要针对当前一些大学对学生信息管理不到位、混乱等不足进行开发并引以为鉴,当然由于开发人员专业知识和计算机技术有限,设计中可能存在欠缺,望请老师及相关读者给予指正。
本系统的业务主要包括任课教师登记汇总初始成绩、学生反馈、组织补考、成绩修改、教务系统进行统计分析修正后的成绩、学生查询。
3、项目背景开发软件的名称:学生信息管理系统项目的任务提出者:西安外事学院开发者:×××用户:西安外事学院学生信息管理员实现软件的单位:人力(电商)一班兼容系统:Windows XP SP2/SP3开发工具:+ Microsoft SQL Server 2000开发时间:6个月4、相关术语Macromedia Dreamweaver 8:网页设计工具Microsoft SQL Server:数据库工具5、选题说明:当今学生成绩管理的繁琐给具有强烈时间观念的行政人员带来了诸多不便,教学办公室缺少一种完善的学籍管理软件,为了对学生成绩的管理方便,开发人员完成了全面的调查与分析,同时与目标用户进行了多次深入沟通,主要用于大中专院校学生日常管理工作,以规范的学生档案为基础,实现了学生考勤,学籍变更、学生奖惩、考试成绩、教师考勤等电算化管理,实现学校人力资源的优化和学生成绩管理的科学管理而设计的,通过试用本系统,可以更加有效的管理学生成绩信息,系统目标。
成绩管理系统
成绩管理系统一、引言成绩管理系统是针对教育管理工作中衍生的需求而开发出来的一种信息化管理系统,它可以管理学生的个人资料、学习成绩、课堂表现等相关信息,为学校和教师提供科学、准确、便利的管理手段。
二、需求分析在管理教学过程中,教师经常需要管理学生的成绩和表现,但传统的管理模式只有手写成绩单或使用Excel表单进行管理,效率较低、易出错,无法及时提供详细的学生数据分析,对应用技术也有很大的限制,同时在数据更新、存储及查询方面也不便于实现。
因此,我们需要一个完善的成绩管理系统,该系统需要具备如下一些基本功能:1、系统管理模块:管理员可以进行用户管理、角色管理、权限管理等。
2、学生管理模块:学生的基本信息录入、更新、查询等管理功能,并且建立教育档案,包括学生基本信息、成绩信息、日常表现等。
3、课程管理模块:教师可以输入课程信息及成绩评定标准,系统可自动计算学生的平均成绩及考试成绩等综合成绩内容,老师可细分每个环节进行考核。
4、班级管理模块:教师可录入每个班级的基本信息、班级成员及班级平时表现等。
5、成绩查询模块:学生可以通过此功能查询自己的成绩,并可以查看排名和各科目的成绩趋势图表等,并且可以在系统中给自己的学习进行自我评价。
6、数据统计分析模块:系统可以对学生成绩情况进行数据分析和统计,提供对学生分数分析、对教学水平的测评、对教学效果和师资力量等的评估。
7、安全/权限控制模块:该模块包括用户登录、权限配置等,保障系统安全。
8、邮件通知模块:该模块用于邮件通知,能够通过邮件通知学生和家长相关学习信息和成绩情况,加强学生与教师家长的信息沟通。
三、技术选用1、前端技术:前端采用 HTML、CSS、JS等,采用Vue框架进行构建。
2、后端技术:后端采用 Java Spring Boot,采用MyBatis作为持久层框架,使用Spring security作为权限管理框架。
3、数据库技术:数据库采用MySQL数据库存储。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西安文理学院信息工程学院软件编程课程设计报告设计题目:学生成绩管理系统课程设计学生学号:020*******专业班级:物联网工程一班学生姓名:张旺阳学生成绩:指导教师(职称):课题工作时间:2015-11-25 至2015-12-9 信息工程学院软件编程课程设计任务书指导教师:日期:2015年11月25日成绩评定表学生姓名:张旺阳学号:020******* 专业/班级:物联网工程一班目录1. 概述 (1)1.1课题背景 (1)1.2系统功能 (3)1.3设计要求 (4)2. 概要设计 (5)2.1系统功能模块 (5)2.2各模块流程图 (6)3. 详细设计 (8)3.1 程序中使用的数据结构 (8)3.2 函数列表 (1)4. 设计结果与分析 (1)25. 总结与体会 (1)5参考文献 (X)附录主要程序代码 (X)1.1课题背景随着计算机的普及,计算机在生活中得到越来越多的应用,其中在计算机上运行的各种软件在解决生活中的实际问题中起到重大的作用,而目前在编写应用程序时,c++以其高效及灵活性成为大多数程序设计者的首选,其次对于普通用户者,利用c++语言设计出适用的小型软件对解决生活中的繁琐问题有很大的作用。
在学校或班级,教师经常会对某次考试中的所有学生的成绩进行统计和管理,由于学生数目经常繁多,所以在处理统计学生总成绩和平均成绩时工作会相对繁琐,所以针对这种情况,同时我分析了成绩管理所需要的功能,在利用C++语言及VC++6.0程序运行平台之下,设计一种小型的学生成绩管理系统。
1.2系统功能1.录入2.修改3.求总分4.求平均分5.查询6.排序1.3设计要求学生成绩信息包括:学期,学号,班别,,四门课程成绩(语文、数学、英语和计算机)。
主要功能:(1)能按学期、按班级完成对学生成绩的录入、修改(2)能按班级统计学生的成绩,求学生的总分及平均分,设计并输出统计报表(3)能查询学生成绩,不及格科目及学生名单(4)能按班级输出学生的成绩单(5)能按班级,按课程,对学生成绩进行排序。
要求:使用二进制文件方式存储数据,系统以菜单方式工作第二章概要设计2.1系统功能模块(1)创建主菜单(2)实现学生成绩信息录入(3)实现学生成绩信息查询(4)实现学生成绩信息修改(一)修改某个学生的成绩(a)按学期查询学生的成绩(b)按班级查询学生的成绩(c)按学号查询学生的成绩(二)查询不及格的科目和学生名单(5)实现学生成绩统计(a)按班级统计学生的总分。
(b)按班级统计学生的平均分。
(6)实现学生成绩信息输出(7)保存学生的成绩信息于文件2.2系统功能流程图第三章详细设计3.1主要数据结构typedef struct studentMark{int term;int classes;char name[10];int number;char sex[7];float chinese;float math;float english;float computer;struct studentMark *next;} MARK;这是定义一个结构体,主要包括学期,班级,,学号,性别,语文成绩,数学成绩,英语成绩,计算机成绩,以及包括一个结构体指针。
另外还用了typedef 这个关键字。
因此,在程序的后面也可以用MARK来定义结构体变量或结构体指针变量。
int term; 定义学期,学期只能是第一学期或者第二学期。
例如int 1;则表示第一学期。
int classes; 定义班级,班级只能是一班或者二班。
例如int 2;则是表示定义为二班。
char name[10]; 定义姓名,在数组中存放字符串。
例如char name[]=“yang”;则该学生的姓名为yang int number; 定义学号,例如int 1;则该学生学号为1号。
char sex[7]; 定义姓别,其性别最大长度为7.例如char sex[]=“man”;说明该学生为男生。
同样可以这样定义女生。
float chinese; 定义语文成绩。
float math; 定义数学成绩。
float english; 定义英语成绩。
float computer; 定义计算机成绩。
struct studentMark *next; 定义一个结构体指针。
3.1.1 主函数int main();主函数,程序的入口。
void m(MARK *head);主菜单的函数原型,在函数m(head)中主要有选择创建学生成绩信息,查询学生成绩信息,修改学生成绩信息,统计学生成绩信息,输出学生成绩信息,存储学生成绩信息于文件,以及退出体统等选项可供用户选择。
MARK *creat(void );创建函数的函数原型,在函数creat()中用户可以输入初始的学生信息:其中包括学生的学期、班级、、学号和性别以及学生的语文、数学、英语和计算机等相关信息。
3.1.2 查询函数void searchMark(MARK *head);查询菜单的函数原型,在函数searchMark(head)中用户可以自由选择是查询某一个学生的成绩还是查询不及格学生的成绩。
而这通过调用函数searchMarkStusentone(head)和函数searchMarkFail(head)完成操作。
void searchMarkStusentone(MARK *head);查询某个学生成绩的函数原型,在函数searchMarkStusentone(head)中用户可以按学号或班级或者是按学期来查找某个学生的成绩。
通过函数searchnumber(head)和函数searchclasses(head)以及函数searchterm(head)完成操作。
void searchnumber(MARK *head) 按学号查找学生的函数原型,;void searchclasses(MARK *head); 按班级查找学生的函数原型,void searchterm(MARK *head); 按学期查找学生的函数原型,void searchMarkFail(MARK *head);查询没有及格的学生的函数原型,通过这个函数可以查找学生不及格科目及学生名单。
3.1.3 修改函数MARK *changeMark(MARK *head);修改学生成绩信息的函数原型,可以修改学生的学期、班级、、学号和性别以及学生的语文、数学、英语和计算机等相关信息。
3.1.4 统计函数void conuntMark(MARK *head);统计学生成绩的函数原型,在函数conuntMark(head)中用户可以统计学生的总成绩以及平均成绩,通过调用函数totalMark(head)和函数aveMark (head)完成操作。
3.1.5 输出函数void totalMark(MARK *head); 统计学生总成绩的函数原型,void aveMark(MARK *head); 统计学生平均成绩的函数原型,void printClassMark(MARK *head);输出学生成绩信息的函数原型,通过此函数可以输出学生的学期、班级、、学号和性别以及学生的语文、数学、英语和计算机等相关信息到屏幕上。
void saveFileMark(MARK *head);存储学生成绩信息于文件的函数原型,通过此函数可以输出学生的学期、班级、、学号和性别以及学生的语文、数学、英语和计算机等相关信息与文件中。
第四章设计结果及分析4.1程序设计结果4.1.1源程序如下:#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>#define MAR (struct studentMark *)malloc(sizeof(struct studentMark)) typedef struct studentMark{int term;int classes;char name[10];int number;char sex[7];float chinese;float math;float english;float computer;struct studentMark *next;} MARK;void m(MARK *head);MARK *creat(void );void searchMark(MARK *head);void searchMarkStusentone(MARK *head);void searchnumber(MARK *head);void searchclasses(MARK *head);void searchterm(MARK *head);void searchMarkFail(MARK *head);MARK *changeMark(MARK *head);void conuntMark(MARK *head);void totalMark(MARK *head);void aveMark(MARK *head);void printClassMark(MARK *head);void saveFileMark(MARK *head);int main(void){MARK *head=NULL;printf(" **********************************************\n");printf(" ## 欢迎进入学生成绩信息管理系统##\n");printf(" **********************************************\n");printf("\n");head=creat();m(head);return(0);}void m(MARK *head ){int choose;while(1)printf("************************************\n"); printf(" 学生成绩信息管理\n");printf("************************************\n"); printf(" 1创建成绩信息\n");printf(" 2查询成绩信息\n");printf(" 3修改成绩信息\n");printf(" 4统计成绩信息\n");printf(" 5按班级输出学生信息\n"); printf(" 6保存成绩信息于文件\n"); printf(" 7退出系统\n");printf("************************************\n"); fflush(stdin);printf("请选择:");scanf("%d",&choose);if(1==choose)head=creat();else if(2==choose)searchMark(head);else if(3==choose)head=changeMark(head);else if(4==choose)conuntMark(head);else if(5==choose)printClassMark(head);else if(6==choose)saveFileMark(head);elseprintf("退出系统");break;}//创建一个学生成绩信息系统MARK *creat(){MARK *head=NULL,*p1=NULL,*p2=NULL;char ch;fflush(stdin);printf("请问是否输入信息?(y 或n)\n");scanf("%c",&ch);head=p1=p2=MAR;while(p1!=NULL && ch=='y'){p1=MAR;printf("请输入要录入学生信息的学期(学期只能为1 或2 ):");fflush(stdin);scanf("%d",&p1->term);while(p1->term!=1 && p1->term!=2){getchar();printf("输入错误!请重新输入:");scanf("%d",&p1->term);}printf("请输入要录入学生成绩信息的班级:");fflush(stdin);scanf("%d",&p1->classes);while(p1->classes!=1 && p1->classes!=2){getchar();printf("输入错误!请重新输入:");scanf("%d",&p1->classes);}printf("请输入该班的学生信息!\n"); printf("请输入学生学号:");fflush(stdin);scanf("%d",&p1->number);printf("请输入学生姓名:");fflush(stdin);scanf("%s",p1->name);printf("请输入学生姓别:"); fflush(stdin);scanf("%s",p1->sex);fflush(stdin);printf("请输入语文成绩(0-100):"); scanf("%f",&p1->chinese);fflush(stdin);printf("请输入数学成绩(0-100):"); scanf("%f",&p1->math);fflush(stdin);printf("请输入英语成绩(0-100):"); scanf("%f",&p1->english);fflush(stdin);printf("请输入计算机成绩(0-100):"); scanf("%f",&p1->computer);p2->next=p1;p2=p1;printf("是否还要输入信息(y/n):"); fflush(stdin);scanf("%c",&ch);}p2->next = NULL; //链表结尾return(head);}//查找学生成绩信息void searchMark(MARK *head){int choose1;while(1){printf("************************************\n");printf(" 查询学生成绩信息\n");printf(" 1查询某个学生成绩\n");printf(" 2查询不及格学生成绩\n");printf(" 3返回主菜单\n");printf("*************************************\n");fflush(stdin);printf("请选择:");scanf("%d",&choose1);if(1==choose1)searchMarkStusentone(head);else if(2==choose1)searchMarkFail(head);elseprintf("返回主菜单");break;}}//修改学生成绩信息(按学期或按学号修改)MARK *changeMark(MARK *head){int choose2;MARK *p=head->next;char name[10];char ch;int number;printf("************************************\n");printf(" 你所需要修改的\n");printf(" 1修改学号\n");printf(" 2修改姓名\n");printf(" 3修改班级\n");printf(" 4修改性别\n");printf(" 5修改成绩\n");printf("*************************************\n");fflush(stdin);printf("请选择:");scanf("%d",&choose2);while(1){while(p!=NULL){if(1==choose2){printf("你要修改的信息是:学号!\n"); //按姓名修改学号fflush(stdin);printf("请输入你要修改的学生姓名:");scanf("%s",name);if (strcmp(name,p->name)==0){fflush(stdin);printf("请输入该学生新的学号:"); //输入新学号scanf("%d",&p->number);printf("修改学生的学号后:\n");printf("%s学生的新学号是%d\n",p->name,p->number);break;}}else if(2==choose2){printf("你要修改的信息是:!\n");fflush(stdin);printf("请输入你要修改的学生的学号:");scanf("%d",&number);if(number==p->number)//输入学号,判断条件{fflush(stdin);printf("请输入该学生的姓名:");scanf("%s",p->name);//输入要做修改的学生姓名printf("修改学生的姓名后:\n");printf("%s是该学生的新姓名\n",p->name);break;}}else if(3==choose2){printf("你要修改的信息是:班级!\n"); //按学号修改班级fflush(stdin);printf("请输入你要修改的学生的学号:");scanf("%d",&number);if(number==p->number){fflush(stdin);printf("请输入该学生的班级:"); //输入要做修改的班级scanf("%d",&p->classes);printf("修改班级后\n");printf("该学生的新班级为:%d\n",p->classes);break;}}else if(4==choose2){printf("你要修改的信息是:性别!\n"); //按学号修改性别fflush(stdin);printf("请输入你要修改的学生的学号:");scanf("%d",&number);if(number==p->number){fflush(stdin);printf("请输入该学生的性别:"); //输入要做修改的性别scanf("%s",p->sex);printf("修改该学生的性别后\n");printf("该学生的新性别为:%s\n",p->sex);break;}}else if(5==choose2){printf("你要修改的信息是:成绩!\n");//按学号修改成绩fflush(stdin);printf("请输入你要修改的学生的学号:");scanf("%d",&number);if(number==p->number)//输入学号{fflush(stdin);printf("请输入该学生新的语文成绩:\n");scanf("%f",&p->chinese);fflush(stdin);printf("请输入该学生新的数学成绩:\n");scanf("%f",&p->math);//输入新的四门成绩fflush(stdin);printf("请输入该学生新的英语成绩:\n");scanf("%f",&p->english);fflush(stdin);printf("请输入该学生新的计算机成绩:\n");scanf("%f",&p->computer);printf("修改后的成绩\n");printf("该学生新的语文成绩:%f\n",p->chinese);printf("该学生新的数学成绩:%f\n",p->math);printf("请该学生新的英语成绩:%f\n",p->english);printf("该学生新的计算机成绩:%f\n",p->computer);break;}}elsep=p->next;}printf("是否还要继续修改信息(y/n):\n"); //判断,是否还要修改信息,跳出循环fflush(stdin);if((ch=getchar())=='n')break;}return(head);}//统计学生成绩总分和平均分void conuntMark(MARK *head){MARK *p=head->next;int classes;char ch1,ch2;fflush(stdin);printf("请输入要统计成绩的班级(1或2):");scanf("%d",&classes);printf("正在统计该班级学生的总分,请稍侯!!!\n");while(1){totalMark(p);printf("是否还要继续统计其他学生的成绩(y/n):");fflush(stdin);if((ch1=getchar())=='n')break;}printf("是否统计该班级学生平均分?(y/n):");fflush(stdin);if((ch2=getchar()!='n')){printf("正在统计该班学生平均分进行统计,请稍侯!!!\n");aveMark(p);//调用平均分函数printf("\n");}}//按班级输出学生信息void printClassMark(MARK *head){MARK *p;p=head->next;printf("***********************************************************************\n");printf("学期\t学号\t班别\t姓名\t性别\t语文\t\t数学\t\t英语\t\t计算机\t\t\n");printf("***********************************************************************\n") ;while(p!=NULL){printf("%d\t",p->term);printf("%d\t",p->number);printf("%d\t",p->classes);printf("%s\t",p->name);printf("%s\t",p->sex);printf("%f\t",p->chinese);printf("%1f\t",p->math);printf("%1f\t",p->english);printf("%1f\t",p->computer);p=p->next;printf("\n");printf("**************************************************************************\ n");}}//保存学生成绩信息于文件void saveFileMark(MARK *head){char *fileName;FILE *stu;MARK *p=head->next;if(p==NULL){printf("没有任何信息,请先存入信息!\n");printf("请按任意键返回主菜单!\n");getchar();}else{fileName=(char *)malloc(sizeof(char));fflush(stdin);printf("请输入你要保存的文件名!\n");gets(fileName);fileName=strcat(fileName,".txt");stu=fopen(fileName,"wb+");while(p!=NULL){fprintf(stu,"%d %d",p->term ,p->classes );fprintf(stu,"%s %d",p->name,p->number);fprintf(stu,"%s",p->sex );fprintf(stu,"%f %f %f %f",p->chinese ,p->math ,p->english ,p->computer );p=p->next ;}fclose(stu);printf("已经保存文件在%s中!\n",fileName);printf("请按任意键返回主菜单!\n");getchar();}}//查找某个学生的成绩void searchMarkStusentone(MARK *head){char ch1,ch2;MARK *p=head->next;if(p==NULL){printf("没有任何信息,请先存入信息!\n");printf("请按任意键返回主菜单!\n");getchar();}elsewhile(1){printf(" 你要选择何种方式查询成绩!\n");printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf(" a、学号: \n");printf(" b、班级: \n");printf(" c、学期: \n");printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");fflush(stdin);scanf("%c",&ch1);switch(ch1){case 'a':searchnumber(head);break;case 'b':searchclasses(head);break;case 'c':searchterm(head);break;}printf("\n");printf("是否还要继续查询学生的信息(y/n):");fflush(stdin);if((ch2=getchar())=='n')break;}}//查询不及格学生void searchMarkFail(MARK *head){MARK *p=head->next ;char name[10];int number,flag=0;int choose5;do{fflush(stdin);printf("请输入!(1按姓名查询2按学号查询 3 返回)\n");scanf("%d",&choose5);switch(choose5){case 1 :fflush(stdin);printf("请输入要查找的名字\n");gets(name);while(p!=NULL){if(!strcmp(name,p->name)){printf(" 学号\n");printf("%s %d\n",p->name ,p->number );if(p->chinese <60)printf("%s 的语文成绩不及格\n",p->name );if(p->math <60)if(p->english <60)printf("%s 的英语成绩不及格\n",p->name );if(p->computer <60)printf("%s 的计算机成绩不及格\n",p->name );flag++;}printf("\n");p=p->next;}if(flag==0)printf("没有你要找的信息!\n");break;case 2 :fflush(stdin);printf("请输入你想要查找的学号:\n");scanf("%d",&number);while(p!=NULL){if(number==p->number){printf(" 学号\n");printf("%s %d\n",p->name ,p->number );if(p->chinese <60)printf("%s 的语文成绩不及格\n",p->name );if(p->math <60)printf("%s 的数学成绩不及格\n",p->name );if(p->english <60)if(p->computer <60)printf("%s 的计算机成绩不及格\n",p->name );flag++;}printf("\n");p=p->next;}if(flag==0)printf("没有你要找的信息!\n");break;case 3:printf("请按任意键返回!\n");getchar();break;default:printf("你输入的有误!!请重新选择\n");break;}}while(choose5!=1 && choose5!=2 && choose5!=3);printf("按任意键返回!\n");getchar();}//按学号查询void searchnumber(MARK *head){MARK *p=head->next;int number,i=0;printf("请输入你要查询的学生学号:\n");scanf("%d",&number);while(p!=NULL){if(number==p->number){printf("-------------------------------------------------------------------------\n");printf("\t学期\t学号\t班别\t姓名\t性别\t语文\t数学\t 英语\t计算机\t\n");printf("-------------------------------------------------------------------------\n");printf("%d\t",p->term);printf("%d\t",p->number);printf("%d\t",p->classes);printf("%s\t",p->name);printf("%s\t",p->sex);printf("%1f\t",p->chinese);printf("%1f\t",p->math);printf("%1f\t",p->english);printf("%1f\t",p->computer);i=2;}p=p->next;}if(i==0)printf("没找到该学生的信息!");}//按班级查询成绩void searchclasses(MARK *head){int classes,i=0;MARK *p=head->next;printf("请输入你要查询成绩的班级:");scanf("%d",&classes);printf("请输出%d班所有同学的成绩:\n",classes);printf("------------------------------------------------------------------------\n");printf("\t学期\t学号\t班别\t姓名\t性别\t语文\t数学\t英语\t计算机\t\n"); printf("-------------------------------------------------------------------------\n");while(p!=NULL){if(classes==p->classes){printf("%d\t",p->term);printf("%d\t",p->number);printf("%d\t",p->classes);printf("%s\t",p->name);printf("%s\t",p->sex);printf("%1f\t",p->chinese);printf("%1f\t",p->math);printf("%1f\t",p->english);printf("%1f\t",p->computer);printf("\n");printf("\n");i=2;}p=p->next;}if(i==0)printf("没找到学生信息!\n");}//按学期查询void searchterm(MARK *head){int term,i=0;MARK *p=head->next;printf("请输入你要查询成绩的学期:");scanf("%d",&term);printf("请输出第%d学期所有班级的信息:\n");printf("------------------------------------------------------------------------\n");printf("\t学期\t学号\t班别\t姓名\t性别\t语文\t数学\t英语\t计算机\t\n");printf("-------------------------------------------------------------------------\n");while(p!=NULL){if(term==p->term){printf("%d\t",p->term);printf("%d\t",p->number);printf("%d\t",p->classes);printf("%s\t",p->name);printf("%s\t",p->sex);printf("%1f\t",p->chinese);printf("%1f\t",p->math);printf("%1f\t",p->english);printf("%1f\t",p->computer);printf("\n");printf("\n");i=2;}p=p->next;}if(i==0)printf("没找到学生信息!\n");}//学生总分void totalMark(MARK *head){float total=0;int i=0;MARK *p=head->next;while(p!=NULL){total=p->chinese+p->math+p->english+p->computer;printf("第%d个学生的总分为:%1f!\n",i+1,total);printf("\n");printf("已经统计了第%d个学生的总成绩!\n",i+1);printf("\n");printf("\n");i++;p=p->next;}}//学生平均分void aveMark(MARK *head){float total=0,ave=0;int i=0;MARK *p=head->next;while(p!=NULL){total=p->chinese+p->math+p->english+p->computer;ave=total/4;printf("第%d个学生的平均分:%1f!\n",i+1,ave);printf("\n");printf("已经统计了第%d个学生的平均成绩!\n",i+1);printf("\n");printf("\n");i++;p=p->next;}}4.1.2运行结果如下:(a)创建学生成绩信息(b)查找学生成绩信息第五章总结与体会5.1个人总结心得在做这学生成绩管理系统时,自我感觉还好,在大的方面能够较为准确的把握,只是在一些小的细节不能做的很好,这一点是值得思考的地方。