学生成绩管理系统数据结构完整版
数据结构 学生成绩管理系统

学生成绩管理系统一.系统简介及功能:给出n个学生的m门考试的成绩表,每个学生的信息由学号、姓名、性别以及各科成绩组成。
对学生的考试成绩进行有关统计:按总数高低次序,打印出名次表,分数相同的为同一名次;按名次打印出每个学生的学号、姓名、总分以及各科成绩,并打印统计表。
二.工作流程:1)开始界面2)选择操作:1.登记学生资料学号姓名四门成绩2.删除学生资料3.查询学生资料4.修改学生资料5.保存学生资料0.退出系统3)按成绩排序程序运行当中,通过选择对应的功能序号来实现所需功能。
对输入的数据要有事先的分析,如果用户输入的数据与实际不相符如输入成绩的数值为负,则程序应输出相应的提示:“您输入的数据有误,请核实!”。
再者就是,当再输入完相应的数据后,程序作出相应的提示,询问用户是否要保存数据。
在排列学生成绩时候,如果出现成绩相同的情况,程序自动作出处理。
最后,在程序可以正确运行的基础上,再增加一些功能,如在排列的时候,自动输出最高分与最低分。
与及格成绩作比较,输出及格人数等相关信息。
三.代码:#include "stdio.h"#include "stdlib.h"#include "string.h"int shoudsave=0; /* */struct student{char num[10];/* 学号*/char name[20];char sex[4];int cgrade;int mgrade;int egrade;int totle;int ave;char neartime[10];/* 最近更新时间*/};typedef struct node{struct student data;struct node *next;}Node,*Link;void menu(){printf("*********************************主菜单*****************************************");printf("\t1登记学生资料\t\t\t\t\t2删除学生资料\n");printf("\t3查询学生资料\t\t\t\t\t4修改学生资料\n");printf("\t5保存学生资料\t\t\t\t\t0退出系统\n");printf("************************************************************************* *******\n");}void printstart(){printf("-----------------------------------------------------------------------\n");}void Wrong(){printf("\n=====>提示:输入错误!\n");}void Nofind(){printf("\n=====>提示:没有找到该学生!\n");}void printc() /* 本函数用于输出中文*/{printf(" 学号\t 姓名性别模电成绩数电成绩信号与系统成绩数据结构成绩总分平均分\n");}void printe(Node *p)/* 本函数用于输出英文*/{printf("%-12s%s\t%s\t%d\t%d\t%d\t %d\t %d\n",p->data.num,p->,p->data.sex,p->data. egrade,p->data.mgrade,p->data.cgrade,p->data.totle,p->data.ave);}Node* Locate(Link l,char findmess[],char nameornum[]) /* 该函数用于定位连表中符合要求的接点,并返回该指针*/{Node *r;if(strcmp(nameornum,"num")==0) /* 按学号查询*/{r=l->next;while(r!=NULL){if(strcmp(r->data.num,findmess)==0)return r;r=r->next;}}else if(strcmp(nameornum,"name")==0) /* 按姓名查询*/{r=l->next;while(r!=NULL){if(strcmp(r->,findmess)==0)return r;r=r->next;}}return 0;}void Add(Link l) /* 增加学生*/{Node *p,*r,*s;char num[10];r=l;s=l->next;while(r->next!=NULL)r=r->next; /* 将指针置于最末尾*/while(1){printf("请你输入学号(以'0'返回上一级菜单:)");scanf("%s",num);if(strcmp(num,"0")==0)break;while(s){if(strcmp(s->data.num,num)==0){printf("=====>提示:学号为'%s'的学生已经存在,若要修改请你选择'4 修改'!\n",num); printstart();printc();printe(s);printstart();printf("\n");return;}s=s->next;}p=(Node *)malloc(sizeof(Node));strcpy(p->data.num,num);printf("请你输入姓名:");scanf("%s",p->);getchar();printf("请你输入性别:");scanf("%s",p->data.sex);getchar();printf("请你输入模电成绩:");scanf("%d",&p->data.cgrade);getchar();printf("请你输入数电成绩:");scanf("%d",&p->data.cgrade);getchar();printf("请你输入信号与系统成绩:");scanf("%d",&p->data.mgrade);getchar();printf("请你输入数据结构成绩:");scanf("%d",&p->data.egrade);getchar();p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;p->data.ave=p->data.totle / 3;/* 信息输入已经完成*/p->next=NULL;r->next=p;r=p;shoudsave=1;}}void Qur(Link l) /* 查询学生*/{int sel;char findmess[20];Node *p;if(!l->next){printf("\n=====>提示:没有资料可以查询!\n");return;}printf("\n=====>1按学号查找\n=====>2按姓名查找\n"); scanf("%d",&sel);if(sel==1)/* 学号*/{printf("请你输入要查找的学号:");scanf("%s",findmess);p=Locate(l,findmess,"num");if(p){printf("\t\t\t\t查找结果\n");printstart();printc();printe(p);printstart();}elseNofind();}else if(sel==2) /* 姓名*/{printf("请你输入要查找的姓名:");scanf("%s",findmess);p=Locate(l,findmess,"name");if(p)printf("\t\t\t\t查找结果\n");printstart();printc();printe(p);printstart();}elseNofind();}elseWrong();}void Del(Link l) /* 删除*/{int sel;Node *p,*r;char findmess[20];if(!l->next){printf("\n=====>提示:没有资料可以删除!\n");return;}printf("\n=====>1按学号删除\n=====>2按姓名删除\n"); scanf("%d",&sel);if(sel==1){printf("请你输入要删除的学号:");scanf("%s",findmess);p=Locate(l,findmess,"num");if(p){r=l;while(r->next!=p)r=r->next;r->next=p->next;free(p);printf("\n=====>提示:该学生已经成功删除!\n"); shoudsave=1;}elseNofind();else if(sel==2){printf("请你输入要删除的姓名:");scanf("%s",findmess);p=Locate(l,findmess,"name");if(p){r=l;while(r->next!=p)r=r->next;r->next=p->next;free(p);printf("\n=====>提示:该学生已经成功删除!\n"); shoudsave=1;}elseNofind();}elseWrong();}void Modify(Link l){Node *p;char findmess[20];if(!l->next){printf("\n=====>提示:没有资料可以修改!\n"); return;}printf("请你输入要修改的学生学号:");scanf("%s",findmess);p=Locate(l,findmess,"num");if(p){printf("请你输入新学号(原来是%s):",p->data.num); scanf("%s",p->data.num);printf("请你输入新姓名(原来是%s):",p->); scanf("%s",p->);getchar();printf("请你输入新性别(原来是%s):",p->data.sex); scanf("%s",p->data.sex);printf("请你输入新的模电成绩(原来是%d分):",p->data.cgrade);scanf("%d",&p->data.cgrade);getchar();printf("请你输入新的数电成绩(原来是%d分):",p->data.mgrade);scanf("%d",&p->data.mgrade);getchar();printf("请你输入新的信号与系统成绩(原来是%d分):",p->data.mgrade); scanf("%d",&p->data.mgrade);getchar();printf("请你输入新的数据结构成绩(原来是%d分):",p->data.egrade); scanf("%d",&p->data.egrade);p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;p->data.ave=p->data.totle/3;printf("\n=====>提示:资料修改成功!\n");shoudsave=1;}elseNofind();}void Disp(Link l){int count=0;Node *p;p=l->next;if(!p){printf("\n=====>提示:没有资料可以显示!\n");return;}printf("\t\t\t\t显示结果\n");printstart();printc();printf("\n");while(p){printe(p);p=p->next;}printstart();printf("\n");}void Tongji(Link l){Node *pm,*pe,*pc,*pt,*pa; /* 用于指向分数最高的接点*/Node *r=l->next;if(!r){printf("\n=====>提示:没有资料可以统计!\n");return ;}pm=pe=pc=pt=pa=r;while(r!=NULL){if(r->data.cgrade>=pc->data.cgrade)pc=r;if(r->data.mgrade>=pm->data.mgrade)pm=r;if(r->data.egrade>=pe->data.egrade)pe=r;if(r->data.totle>=pt->data.totle)pt=r;if(r->data.ave>=pa->data.ave)pa=r;r=r->next;}printf("------------------------------统计结果--------------------------------\n"); printf("总分最高者:\t%s %d分\n",pt->,pt->data.totle);printf("平均分最高者:\t%s %d分\n",pa->,pa->data.ave);printf("模电最高者:\t%s %d分\n",pe->,pe->data.egrade);printf("数电最高者:\t%s %d分\n",pe->,pe->data.egrade);printf("信号与系统最高者:\t%s %d分\n",pm->,pm->data.mgrade); printf("数据结构最高者:\t%s %d分\n",pc->,pc->data.cgrade); printstart();}void Sort(Link l){Link ll;Node *p,*rr,*s;ll=(Link)malloc(sizeof(Node)); /* 用于做新的连表*/ll->next=NULL;if(l->next==NULL){printf("\n=====>提示:没有资料可以排序!\n");return ;}p=l->next;while(p){s=(Node*)malloc(sizeof(Node)); /* 新建接点用于保存信息*/ s->data=p->data;s->next=NULL;rr=ll;while(rr->next!=NULL && rr->next->data.totle>=p->data.totle) rr=rr->next;if(rr->next==NULL)rr->next=s;else{s->next=rr->next;rr->next=s;}p=p->next;}free(l);l->next=ll->next;printf("\n=====>提示:排序已经完成!\n");}void Save(Link l){FILE* fp;Node *p;int flag=1,count=0;fp=fopen("c:\\student","wb");if(fp==NULL){printf("\n=====>提示:重新打开文件时发生错误!\n");exit(1);}p=l->next;while(p)if(fwrite(p,sizeof(Node),1,fp)==1){p=p->next;count++;}else{flag=0;break;}}if(flag){printf("\n=====>提示:文件保存成功.(有%d条记录已经保存.)\n",count);shoudsave=0;}fclose(fp);}void main(){Link l;/* 连表*/FILE *fp; /* 文件指针*/int sel;char ch;char jian;int count=0;Node *p,*r;printf("\n\t欢迎进入\n\t\t\t\t学生成绩管理系统\n\n\t\t\t\t-------作者:吴林02105120 \n"); l=(Node*)malloc(sizeof(Node));l->next=NULL;r=l;fp=fopen("C:\\student","rb");if(fp==NULL){printf("\n=====>提示:文件还不存在,是否创建?(y/n)\n");scanf("%c",&jian);if(jian=='y'||jian=='Y')fp=fopen("C:\\student","wb");elseexit(0);printf("\n=====>提示:文件已经打开,正在导入记录......\n");while(!feof(fp)){p=(Node*)malloc(sizeof(Node));if(fread(p,sizeof(Node),1,fp)) /* 将文件的内容放入接点中*/{p->next=NULL;r->next=p;r=p; /* 将该接点挂入连中*/count++;}}fclose(fp); /* 关闭文件*/printf("\n=====>提示:记录导入完毕,共导入%d条记录.\n",count);while(1){menu();printf("请你选择操作:");scanf("%d",&sel);if(sel==0){if(shoudsave==1){ getchar();printf("\n=====>提示:资料已经改动,是否将改动保存到文件中(y/n)?\n"); scanf("%c",&ch);if(ch=='y'||ch=='Y')Save(l);}printf("\n=====>提示:你已经退出系统,再见!\n");break;}switch(sel){case 1:Add(l);break; /* 增加学生*/case 2:Del(l);break;/* 删除学生*/case 3:Qur(l);break;/* 查询学生*/case 4:Modify(l);break;/* 修改学生*/case 5:Save(l);break;/* 保存学生*/case 9:printf("\t\t\t==========帮助信息==========\n");break;default: Wrong();getchar();break; }}}/* */四.运行图片。
数据结构学生成绩管理系统

#include<stdio.h>#include<malloc.h>#include<conio.h>#define ERROR 0#define OK 1#define OVERFLOW -1#define LIST_INIT_SIZE 100#define LISTINCREMENT 10typedef struct Stu{char name[20];//姓名char stuno[10];//学号int age;//年龄int score1;//语文成绩int score2;//数学成绩int score3;//英语成绩}ElemType;typedef struct LIST{ElemType *elem;int length;//顺序表长度int listsize;//链表最大值}List;int init(List *L)//构造一个空的线性表L{L->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));if(!L->elem)exit(OVERFLOW);L->length=0;L->listsize=LIST_INIT_SIZE;return OK;}int ListLength(List *L){return L->length;}int Insert_SqList(List *La,int i,ElemType x){ElemType *p,*q,*newbase;if(i<1||i>La->length+1)return ERROR;if(La->length>=La->listsize){newbase=(ElemType*)realloc(La->elem,(La->listsize+LISTINCREMENT)*sizeof(ElemTyp e));if(!newbase)exit(OVERFLOW);La->elem=newbase;La->listsize+=LISTINCREMENT;}q=&(La->elem[i-1]);for(p=&(La->elem[La->length-1]);p>=q;--p)*(p+1)=*p;*q=x;++La->length;return OK;}void printList(List *L){int i;for(i=0;i<L->length;i++){printf("第%d个学生的信息:\n",i+1);printf("%s,%s,%d,%d,%d,%d",L->elem[i].name,L->elem[i].stuno,L->elem[i].age,L->elem[i] .score1,L->elem[i].score2,L->elem[i].score3);printf("\n");}}int Delete_SqList(List *La,int i,ElemType *x){ElemType *p,*q;if(i<1||i>La->length)return ERROR;p=&(La->elem[i-1]);x=p;q=La->elem+La->length-1;for(++p;p<=q;++p)*(p-1)=*p;--La->length;return OK;}void main(){int i,w,n;int j=1;List list;ElemType stuck;init(&list);printf("请输入要建立学生信息的长度:\n",n);scanf("%d",&n);for(i=1;i<=n;i++){printf("请输入第%d个学生的信息\n",i);printf("输入第%d个学生的姓名:\n",i);scanf("%s",list.elem[i-1].name);printf(请输入第%d个学生的学号:\n",i);scanf("%s",list.elem[i-1].stuno);printf("请输入第%d个学生的年龄:\n",i);scanf("%d",&list.elem[i-1].age);printf("请输入第%d个学生的语文成绩:\n",i);scanf("%d",&list.elem[i-1].score1);printf("请输入第%d个学生的数学成绩:\n",i);scanf("%d",&list.elem[i-1].score2);printf("请输入第%d个学生的英语成绩:\n",i);scanf("%d",&list.elem[i-1].score3);list.length++;}printList(&list);。
学生成绩管理系统数据流程图及数据字典

学生成绩管理系统数据流程图及数据字典一、数据流程图学生成绩管理系统是一个用于管理学生考试成绩的系统。
下面是该系统的数据流程图,展示了数据的流动和处理过程。
1. 输入流程a. 学生信息输入:学生的基本信息包括学号、姓名、性别、年龄等,通过学生信息输入界面输入,并存储到学生信息数据库中。
b. 课程信息输入:课程的基本信息包括课程编号、课程名称、学分等,通过课程信息输入界面输入,并存储到课程信息数据库中。
c. 成绩信息输入:学生的成绩信息包括学号、课程编号、成绩等,通过成绩信息输入界面输入,并存储到成绩信息数据库中。
2. 处理流程a. 学生信息管理:包括学生信息的增加、修改、删除和查询等操作。
管理员可以通过学生信息管理界面对学生信息进行管理,包括添加新的学生信息、修改学生信息、删除学生信息和查询学生信息。
b. 课程信息管理:包括课程信息的增加、修改、删除和查询等操作。
管理员可以通过课程信息管理界面对课程信息进行管理,包括添加新的课程信息、修改课程信息、删除课程信息和查询课程信息。
c. 成绩信息管理:包括成绩信息的录入、修改、删除和查询等操作。
管理员可以通过成绩信息管理界面对成绩信息进行管理,包括录入学生的成绩、修改学生的成绩、删除学生的成绩和查询学生的成绩。
d. 成绩统计分析:根据学生的成绩信息进行统计和分析。
管理员可以通过成绩统计分析界面查看各个课程的平均成绩、最高成绩、最低成绩等统计数据。
3. 输出流程a. 学生信息输出:管理员可以通过学生信息输出界面将学生的基本信息导出为Excel或PDF等格式的文件。
b. 课程信息输出:管理员可以通过课程信息输出界面将课程的基本信息导出为Excel或PDF等格式的文件。
c. 成绩信息输出:管理员可以通过成绩信息输出界面将学生的成绩信息导出为Excel或PDF等格式的文件。
二、数据字典数据字典是对系统中使用的数据元素进行定义和说明的工具。
下面是学生成绩管理系统的数据字典,包括了系统中使用的各个数据元素及其属性。
学生成绩管理系统(数据结构C语言版源代码)

让结局不留遗憾,让过程更加完美。
#include<stdio.h>#include<string.h>#include<stdlib.h>struct students{char Num[10]; /*字符型学生学号*/char Name[20]; /*字符型学生姓名*/char Sex[3]; /*字符型学生性别*/double English; /*双精度实型英语成绩*/double Java; /*双精度实型Java成绩*/double Sjjg; /*双精度实数据结构*/double Szdl; /*双精度实型数字电路*/double Jsj; /*计算机组成原理*/struct students *next; /*用与构建连表指向下一结点*/};FILE *fp; /*定义全局变量fp*/void Revisemenu();/*修改菜单*/void Sortmenu();/*排序菜单*/void menu();/*主菜单*/void secret();/*安全验证*/struct students * Input();/*新建学生信息*/void fprint(struct students *head);/*将信息导入文件可追加*/void fprint_(struct students *head);/*将信息导入文件并覆盖*/void Browse(struct students *head);/*浏览全部学生信息*/struct students * create(struct students *headint *n);/*从tushu_list中读取数据构建链表*/void FindofNum(struct students *head);/*按学号查询学生信息*/void FindofNname(struct students *head);/*按姓名查询学生信息*/void SortEnglish(struct students * head);/*按英语成绩排序*/void SortJava(struct students * head);/*按Java成绩排序*/void SortSjjg(struct students * head);/*按数据结构成绩排序*/void SortSzdl(struct students * head);/*按数字逻辑电路成绩排序*/ void SortJsj(struct students * head);/*按计算机组成原理成绩排序*/ struct students * Delete(struct students * headchar m[15]);/*按学号删除学生成绩信息*/struct students * Revise();/*修改学生信息(按编号修改)*//*主菜单*/void menu(){printf("\n\n");printf("***************************************************\n");printf(" 学生成绩管理系统 \n");printf("---------------------------------------------------\n");printf(" 1-添加新同学 2-浏览学生信息 \n");printf(" 3-按学号查询 4-按姓名查询 \n");printf(" 5-按成绩排序 6-修改学生信息 \n");printf(" 7-删除学生信息 0-退出系统 \n");printf("---------------------------------------------------\n");printf("___________________________________________________\n"); }/*排序菜单*/void Sortmenu(){printf("\n\n");printf("***************************************************\n");printf(" 按成绩排序 \n");printf(" 1-大学英语 2-JAVA编程 \n");printf(" 3-数据结构 4-数字逻辑电路 \n");printf(" 5-计算机组成原理 0-返回上级菜单 \n");printf("***************************************************\n"); }/*修改菜单*/void Revisemenu(){printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf(" 1--修改学生姓名 2--修改学生学号 \n"); printf(" 3--修改学生性别 4--修改英语成绩 \n"); printf(" 5--修改JAVA成绩 6--修改数据结构 \n"); printf(" 7--修改数字电路 8--修改计算计 \n");printf(" 0--返回上级菜单 \n"); printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); }/*安全验证*/void secret(){char a[20];printf("**欢迎来到学生信息管理系统进入系统前请先进行密码验证---");printf(" ");do{gets(a); /*输入密码*/system("cls"); /*调用库函数清屏*/printf("对不起!您输入的密码有误请重新输入---");}while(strcmp(a"0605")!=0); /*单一密码"0605"*/system("cls");}/*新建学生信息*/struct students * Input(){struct students *p1*p2*head; /*建立辅助结点及头结点*/char Name;int n=0x;printf("\n请按对应项输入学生信息以#结束:\n");printf("姓名学号性别英语 Java 数据结构数字电路计算机组成原理\n");p1=(struct students *)malloc(sizeof(struct students));head=p2=p1;do{ /*使用do while语句输入学生信息*/scanf("%s"&p1->Name);if(strcmp(p1->Name"#")==0)break; /*判断结束符*/elsescanf("%s%s%lf%lf%lf%lf%lf"p1->Nump1->Sex&p1->English&p1->Java&p1->Sjjg&p1->Szdl&p1->Jsj);Name='#';p1=(struct students *)malloc(sizeof(struct students));p2->next=p1;p2=p1;n++;}while(1);p1->next=NULL;printf("学生信息输入结束!\n");getchar();printf("是否保存学生信息?(1.是/2.否):");scanf("%d"&x);if(x==1)fprint(head); /*调用函数保存至文件*/ elseprintf("\n文件没有被保存!\n");return head; /*返回头指针*/}/*将信息导入文件可追加*/void fprint(struct students *head){struct students *p1;if((fp=fopen("students_list.txt""a"))==NULL){printf("File open error!\n");exit(0);}for(p1=head;p1->next!=NULL;p1=p1->next) /*遍历*/fprintf(fp"%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p1->Namep1->Nump1->Sexp1->Englishp1->Javap1->Sjjgp1->Szdlp1->Jsj);/*将学生信息写入文件*/fclose(fp); /*关闭文件*/printf("\n学生信息已成功保存到文件 students_list.txt 中!\n");getchar();}/*将信息导入文件并覆盖*/void fprint_(struct students *head){struct students *p1;if((fp=fopen("students_list.txt""w"))==NULL)printf("File open error!\n");exit(0);}for(p1=head;p1!=NULL;p1=p1->next) /*遍历*/fprintf(fp"%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p1->Namep1->Nump1->Sexp1->Englishp1->Javap1->Sjjgp1->Szdlp1->Jsj);/*将学生信息写入文件*/fclose(fp); /*关闭文件*/;getchar();}/*浏览全部学生信息*/void Browse(struct students *head){char Num[10]; /*字符型学生学号*/char Name[20]; /*字符型学生姓名*/char Sex[3]; /*字符型学生性别*/double English; /*双精度实型英语成绩*/double Java; /*双精度实型Java成绩*/double Sjjg; /*双精度实数据结构*/double Szdl; /*双精度实型数字电路*/double Jsj; /*计算机组成原理*/if((fp=fopen("students_list.txt""a+"))==NULL){printf("File open error!\n");exit(0);}printf("-------------------------------------------------------------\n");printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(!feof(fp))/*读取并输出*/{fscanf(fp"%s%s%s%lf%lf%lf%lf%lf"NameNum&English&Java&Sjjg&Szdl&Jsj);printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"NameNumSexEnglishJavaSjjgSzdlJsj);};if(fclose(fp)){printf("Can not close the file!\n");exit(0);}}/*从tushu_list中读取数据构建链表*/struct students * create(struct students * headint *n){FILE *fp;struct students*p*p1*p2;if((fp=fopen("students_list.txt""a+"))==NULL){printf("File open error!\n");exit(0);}while(!feof(fp)){(*n)++;p=(struct students *)malloc(sizeof(struct students));fscanf(fp"%s%s%s%lf%lf%lf%lf%lf"p->Namep->Nump->Sex&p->English&p->Java&p->Sjjg&p->Szdl&p->Jsj);if(head==NULL){head=p;p1=p;}else{p1->next=p;p2=p1;p1=p;}}p2->next=NULL;free(p);(*n)--;fclose(fp);return head;}/*按姓名查询学生信息*/void FindofName(struct students *head) {int i=0n=0;char b[20];struct students *p;head=create(head&n);p=head;printf("\n请输入要查询的学生姓名:");scanf("%s"b);while(p!=NULL){if(strcmp(p->Nameb)==0){printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);i++;}p=p->next;}if(i==0)printf("\n对不起!没有找到名为"%s"的学生信息!\n"b);}/*按学号查询学生信息*/void FindofNum(struct students *head){int i=0n;char b[20];struct students *p;head=create(head&n);p=head;printf("\n请输入要查询的学生学号:");scanf("%s"b);while(p!=NULL){if(strcmp(p->Numb)==0){printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);i++;}p=p->next;}if(i==0)printf("\n对不起!没有找到学号为"%s"学生信息!\n"b);}/*按英语成绩排序*/void SortEnglish(struct students * head){struct students *p*tail; /*定义中间变量*/int n;double English;p=(struct students *)malloc(sizeof(struct students));head=create(head&n);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(head->next!=NULL) /*利用选择法排序*/{tail=NULL;p=head;English=p->English; /*将链表中第一个成绩赋给English*/while(p!=NULL){if((p->English)>English)/*比较*/English=p->English;tail=p;p=p->next;}tail=NULL;p=head;while(p->next!=NULL){if(p->English==English){printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->English==English){ /*分数相同时无需比较*/ printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/ printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);/*浏览排序后的信息*/printf("按英语成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/*按JAVA成绩排序*/void SortJava(struct students * head){struct students *p*tail; /*定义中间变量*/int n;double Java;p=(struct students *)malloc(sizeof(struct students));head=create(head&n);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(head->next!=NULL) /*利用选择法排序*/{tail=NULL;p=head;Java=p->Java; /*将链表中第一个成绩赋给Java*/while(p!=NULL){if((p->Java)>Java)/*比较*/Java=p->Java;tail=p;p=p->next;}tail=NULL;p=head;while(p->next!=NULL){if(p->Java==Java){printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->Java==Java){ /*成绩相同时无需比较*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);/*浏览排序后的信息*/printf("按Java成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/*按数据结构排序*/void SortSjjg(struct students * head){struct students *p*tail; /*定义中间变量*/int n;double Sjjg;p=(struct students *)malloc(sizeof(struct students));head=create(head&n);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(head->next!=NULL) /*利用选择法排序*/{tail=NULL;p=head;Sjjg=p->Sjjg; /*将链表中第一个成绩赋给Sjjg*/while(p!=NULL){if((p->Sjjg)>Sjjg)/*比较*/Sjjg=p->Sjjg;tail=p;p=p->next;}tail=NULL;p=head;while(p->next!=NULL){if(p->Sjjg==Sjjg){printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->Sjjg==Sjjg){ /*成绩相同时无需比较*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);/*浏览排序后的信息*/printf("按数据结构成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/*按数字电路排序*/void SortSzdl(struct students * head){struct students *p*tail; /*定义中间变量*/int n;double Szdl;p=(struct students *)malloc(sizeof(struct students));head=create(head&n);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(head->next!=NULL) /*利用选择法排序*/{tail=NULL;p=head;Szdl=p->Szdl; /*将链表中第一个成绩赋给Szdl*/while(p!=NULL){if((p->Szdl)>Szdl)/*比较*/Szdl=p->Szdl;tail=p;p=p->next;}tail=NULL;p=head;while(p->next!=NULL){if(p->Szdl==Szdl){printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->Szdl==Szdl){ /*成绩相同时无需比较*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);/*浏览排序后的信息*/printf("按数字电路成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/*按计算机组成原理排序*/void SortJsj(struct students * head){struct students *p*tail; /*定义中间变量*/int n;double Jsj;p=(struct students *)malloc(sizeof(struct students));head=create(head&n);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(head->next!=NULL) /*利用选择法排序*/{tail=NULL;p=head;Jsj=p->Jsj; /*将链表中第一个成绩赋给Jsj*/while(p!=NULL){if((p->Jsj)>Jsj)/*比较*/Jsj=p->Jsj;tail=p;p=p->next;}tail=NULL;p=head;while(p->next!=NULL){if(p->Jsj==Jsj){printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->Jsj==Jsj){ /*成绩相同时无需比较*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);/*浏览排序后的信息*/printf("按计算机组成原理成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/*按学号删除学生成绩信息*/struct students * Delete(struct students * headchar m[15]){struct students *ptr1*ptr2;int n;printf("\n所有学生信息如下:\n");Browse(head);printf("\n请输入想要删除的学生学号:");scanf("%s"m);head=create(head&n);if(head==NULL){printf("无学生信息!\n");return head;}if((strcmp(head->Numm)==0)&&head!=NULL){ptr2=head;head=head->next;free(ptr2);}if(strcmp(head->Numm)!=0){ptr1=head;ptr2=head->next;while(ptr2!=NULL){if(strcmp(ptr2->Numm)==0){ptr1->next=ptr2->next;free(ptr2);}elseptr1=ptr2;ptr2=ptr1->next;}}fprint_(head);printf("\n学号为' %s '学生信息已被删除并保存至文件!\n"m);return head;}/*修改学生信息(按编号修改)*/struct students * Revise(){int n=0t;char num[10];char Num[10]; /*字符型学生学号*/char Name[20]; /*字符型学生姓名*/char Sex[3]; /*字符型学生性别*/double English; /*双精度实型英语成绩*/double Java; /*双精度实型Java成绩*/double Sjjg; /*双精度实数据结构*/double Szdl; /*双精度实型数字电路*/double Jsj; /*计算机组成原理*/struct students *head=NULL;struct students *p;printf("\n所有学生信息如下:\n");Browse(head);head=create(head&n);printf("\n输入需要修改的学生的学号:");scanf("%s"num);p=head;while(head!=NULL){if(strcmp(p->Numnum)==0){system("cls");Revisemenu();printf("编号为%s的学生信息如下:\n"num);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);while(1){printf("请选择需要修改的信息:");scanf("%d"&t);switch(t){case 1:printf("请输入新姓名:");scanf("%s"Name);strcpy(p->NameName);break;case 2:printf("请输入新学号:");scanf("%s"&Num);strcpy(p->NumNum);break;case 3:printf("请输入新性别:");scanf("%s"Sex);strcpy(p->SexSex);break;case 4:printf("请输入新英语成绩:");scanf("%lf"&English);p->English=English;break;case 5:printf("请输入新Java成绩:");scanf("%lf"&Java);p->Java=Java;break;case 6:printf("请输入新数据结构成绩:");scanf("%lf"&Sjjg);p->Sjjg=Sjjg;break;case 7:printf("请输入新数字电路成绩:");scanf("%lf"&Szdl);p->Szdl=Szdl;break;case 8:printf("请输入新计算机组成原理成绩:");scanf("%lf"&Jsj);p->Jsj=Jsj;break;case 0:system("cls");menu();goto lab;break;default:printf("对不起输入有误!");break;}}}elsep=p->next;}lab:fprint_(head);printf("修改完成并储存至文件!\n");return head;}/*主函数*/void main(){int choicech;char m[15];struct students *head=NULL;secret();menu();while(1){printf("请输入选项:");scanf("%d"&choice);switch(choice){case 1:Input();break;case 2:system("cls");menu();Browse(head);break;case 3:system("cls");menu();FindofNum(head);break;case 4:system("cls");menu();FindofName(head);break;case 5:system("cls");Sortmenu();do{printf("请输入您的选择:");scanf("%d"&ch);switch(ch){case 1:system("cls");Sortmenu();SortEnglish(head);break;case 2:system("cls");Sortmenu();SortJava(head);break;case 3:system("cls");Sortmenu();SortSjjg(head);break;case 4:system("cls");Sortmenu();SortSzdl(head);break;case 5:system("cls");Sortmenu();SortJsj(head);break;}}while(ch!=0);system("cls");menu();break;case 6:system("cls");menu();Revise();break;case 7:system("cls");menu();head=Delete(headm);break;case 0:system("cls");printf("\t\t欢迎下次再来!");exit(0);default:printf("对不起输入有误!");break;}}return ;}。
学生成绩管理系统数据库表结构说明

学生成绩管理系统数据库表结构说明1、学生表 tb_Student字段描述字段名数据类型是否主键是否为空学号StuID Char(12)是否姓名StuName varchar(8)否否性别Sex char(2)否否出生日期BirthDate datetime(8)否否籍贯Native varchar(40)否否入学时间EntranceTime datetime(8)否否政治面貌PoliticalFace Nchar(12)否否家庭住址Address Nvarchar(50)否否个人电话PerPhone Nchar(11)否否家庭电话HPhone Nchar(11)否否身份证号IDNum varchar(18)否否照片Photo varbinary(max)否否班级编号ClassID Char(9)否否宿舍编号DormitoryId Char(4)否否民族National Nchar(2)否否就业情况EmploymentStatus Nvarchar(10)否否2、班级表 tb_Class字段描述字段名数据类型是否主键是否为空班级编号ClassID char(9)是否班级名称ClassName varchar(20)否否人数Num tinyint(1)否否专业编号SpecializeID char(2)否否系部编号DepartmentID char(2)否否3、专业表 tb_Specialize字段描述字段名数据类型是否主键是否为空专业编号SpecializeID char(2)是否专业名称SpecializeName varchar(20)否否系部编号DepartmentID char(2)否否4、系部表 tb_Department字段描述字段名数据类型是否主键是否为空系部编号DepartmentID char(2)是否系部名称DepartmentName varchar(20)否否5、教师表 tb_Teacher字段描述字段名数据类型是否主键是否为空教师编号TeacherID char(10)是否姓名T eacherName varchar(8)否否性别Sex char(2)否否出生日期BirthDate datetime(8)否否政治面貌PoliticalFace varchar(8)否否籍贯Native varchar(40)否否民族National Nchar(2)否否联系电话Tephone Nchar(11)否否电子邮箱Email Varchar(50)否否身份证号IDNum varchar(18)否否照片Photo varbinary(max)否否入校时间AdmissionTime Datetime否否第一学历FirstDegree char(4)否否最高学历HighestDegree char(4)否否职务Position Narchar(8)否否备注Notes varchar(255)否是6、课程表 tb_Course字段描述字段名数据类型是否主键是否为空课程编号CourseID char(8)是否课程名称CourseName varchar(25)否否课程性质CourseNature char(10)否否学分Credits tinyint(1)否否7、用户表 tb_User字段描述字段名数据类型是否主键是否为空用户编号UserID Varchar(16)是否用户名UserName varchar(12)是否密码Pwd varchar(10)否否用户组编GroupID bit(1)否否号删除标记DeleteMarkers varchar(20)否是8、教师任课表 tb_T eacherYoung字段描述字段名数据类型是否主键是否为空教师编号TeacherID Char(10)是否课程编号CourseID char(8)是否班级编号ClassID char(9)是否学期Term tinyint(1)否否教室编号ClassroomID varchar(10)否否每周学时WeeklyHours tinyint(1)否否学期工作TermWorkload tinyint(3)否否量午别WuBie Vchar(2)否否节次JieCi Char(2)否否备注Notes varchar(255)否是9、教学计划表 tb_TeachingPlan 字段描述字段名数据类型是否主键是否为空学期Term tinyint(1)是否系部编号DepartmentID char(2)否否专业编号SpecializeID char(2)否否课程编号CourseID char(8)否否起始周StartWeek tinyint(1)否否结束周EndWeek tinyint(1)否否理论学时TheoryHours tinyint(1)否否实践学时PracticeHours tinyint(1)否否总学时SumHours tinyint(1)否否10、成绩表 tb_Tiny字段描述字段名数据类型是否主键是否为空学期Term tinyint(1)是否学号StuID char(12)否否课程编号CourseID char(8)否否考试成绩ExamGrade Tinyint(1)否否平时成绩ParTGrade Tinyint(1)期评Grade Tinyint(1)11、学生奖惩表 tb_StuRewardPun字段描述字段名数据类型是否主键是否为空自动编号RewardPunID Int(4)是否学号StuID char(12)否否奖惩性质RewardPunNature char(2)否否奖惩内容RewardPunContent varchar(40)否否奖惩原因RewardPunReason varchar(60)否否学期Term tinyint(1)否否12、教室表 tb_Classroom字段描述字段名数据类型是否主键是否为空教室编号ClassroomNum Varchar(10)是否教室类型ClassroomType varchchar(10)否否备注Notes Varchar(255)否是13、实训表 tb_Training字段描述字段名数据类型是否主键是否为空实训编号TrainingID Varchar(10)是否实训公司Training.pany Varchar(30)否否实训地点TrainingPlace Varchar(50)否否实训费用TrainingCost Char(5)否否实训时间TrainingTime Datetime否否实训情况TrainingSituation Varchar(50)否否实训人数TrainingNum vchar(max)否否备注Notes Varchar(255)否否否否14、学生——实训表 tb_StuTraining字段描述字段名数据类型是否主键是否为空自动编号Automati.um Char(10)是否学号StuNum Char(12)否否实训编号TrainingID Varchar(10)否否15、学历学位获得情况表 tb_DegreeGetSituation字段描述字段名数据类型是否主键是否为空自动编号Automati.um Char(10)是否教师编号TeacherID Char(12)否否学位获得时DegreeGetTime Datetime否否间专业方向ProDirection Varchar(20)否否学位Degree Vchar(20)否否16论文表 tb_ Paper字段描述字段名数据类型是否主键是否为空自动编号Automati.um Char(10)是否教师编号TeacherID Char(12)否否论文标题PaperTitle Vchar(100)否否性质PaperNature Varchar(20)否否发表刊物PublishAtions Varchar(20)否否发表时间PublishTime Datetime否否期号PeriodNum Char(4)否否卷号RollNum Char(4)否否字数Words Char(12)否否单位排序UnitSorting Char(10)否否作者排序AuthorSorting Char(10)否否刊物性质AtionsNature Char(10)否否17、科研项目情况 tb_KeYProjects Situation字段描述字段名数据类型是否主键是否为空自动编号Automati.um Char(10)是否教师编号TeacherID Char(12)否否科研项目KeYProjects Varchar(50)否否科研类型KeYType Varchar(20)否否结项时间JieXTime Datetime否否资助金额Grants Char(20)否否项目编号ProjectsNum Char(20)否否主持人Hoster Vchar(8)否否18、职称晋升情况 tb_ZhiCh字段描述字段名数据类型是否主键是否为空自动编号Automati.um Char(10)是否教师编号TeacherID Char(12)否否职称ZhiCh Vchar(12)否否GetZhiChTime Varchar(20)否否获得职称时间现所在单位NowUnit Varchar(30)否否备注Notes Varchar(255)否否19、参加工作访问进修情况 tb_StudyVisit字段描述字段名数据类型是否主键是否为空自动编号Automati.um Char(10)是否教师编号TeacherID Char(12)否否进修访问StudyVisitPlace Varchar(50)否否地点时间StudyTime Varchar(20)否否性质StudyNature Vchar(20)否否身份Identity Vchar(20)否否兼职情况PartTimeJob Vchar(20)否否备注Notes Varchar(255)否否20、获奖情况(荣誉称号表彰) tb_WinningSituation 字段描述字段名数据类型是否主键是否为空自动编号Automati.um Char(10)是否教师编号TeacherID Char(12)否否获奖名称WinningName Vchar(20)否否授予单位GrantUnit Varchar(20)否否授予时间GrantTime Datetime否否获奖类型WinningType Vchar(20)否否21、教学工作情况 tb_T eachJob字段描述字段名数据类型是否主键是否为空自动编号Automati.um Char(10)是否教师编号TeacherID Char(12)否否学年学期SchoolSemester Char(4)否否上课系部ClassDepartment Vchar(20)否否上课专业ClassPro Vchar(20)否否课程Course Vchar(20)否否上课班级Classroom Vchar(20)否否上课地点ClassPlace Vchar(20)否否(教室)授课类型ClassType Vchar(20)否否备注Notes Varchar(255)否否22、工作量统计字段描述字段名数据类型是否主键是否为空自动编号Automati.um Char(10)是否教师编号TeacherID Char(12)否否学年学期SchoolSemester Char(4)否否上课系部ClassDepartment Vchar(20)否否上课专业ClassPro Vchar(20)否否课程Course Vchar(20)否否上课班级Classroom Vchar(20)否否ClassPlace Vchar(20)否否上课地点(教室)授课类型ClassType Vchar(20)否否备注Notes Varchar(255)否否23、权限表字段描述字段名数据类型是否主键是否为空权限编号PerID Char (2)是否权限名称PerName Varchar(20)否否24、用户组字段描述字段名数据类型是否主键是否为空用户组编号GroupID Char(1)是否权限编号PerID Char(2)否否用户组名称GroupName Varchar(20)否否25、操作日志表字段描述字段名数据类型是否主键是否为空操作编号OperationID Int是操作ip Ip Varchar(20)否否登入时间LoginTime DateTime否否操作用户UserID Varchar(16)否否操作类型OperationType Varchar(20)否否。
学生成绩管理系统数据流程图及数据字典

学生成绩管理系统数据流程图及数据字典标题:学生成绩管理系统数据流程图及数据字典引言概述:学生成绩管理系统是学校管理学生成绩的重要工具,通过数据流程图和数据字典可以清晰地展示系统的数据流动和数据结构。
本文将详细介绍学生成绩管理系统的数据流程图及数据字典,匡助读者更好地理解系统的运作机制。
一、数据流程图1.1 学生成绩录入流程- 学生填写成绩单- 教师审核成绩单- 教务处录入成绩数据1.2 学生成绩查询流程- 学生登录系统- 查询成绩- 系统显示成绩信息1.3 学生成绩统计流程- 系统自动统计成绩数据- 生成各种统计报表- 教师和学生查看统计结果二、数据字典2.1 学生信息表- 学生ID- 姓名- 年级- 班级2.2 课程信息表- 课程ID- 课程名称- 学分- 授课教师2.3 成绩信息表- 成绩ID- 学生ID- 课程ID- 成绩三、数据流程图与数据字典的关系3.1 数据流程图与数据字典的对应关系- 数据流程图中的每一个流程都对应着数据字典中的数据表- 数据流程图中的数据流动路径可以通过数据字典中的数据表字段进行解释3.2 数据字典的作用- 数据字典定义了系统中所有的数据表及其字段- 数据字典为系统开辟和维护提供了清晰的数据结构参考3.3 数据流程图与数据字典的维护- 随着系统的升级和改进,数据流程图和数据字典需要及时更新- 数据流程图和数据字典的一致性对系统的稳定性和可维护性至关重要四、数据流程图及数据字典的优势4.1 提高数据管理效率- 数据流程图和数据字典清晰地展示了系统中数据的流动和结构,有助于提高数据管理的效率4.2 降低系统开辟成本- 数据流程图和数据字典为系统开辟提供了详细的数据结构和流程设计,有助于降低系统开辟成本4.3 提升系统稳定性- 数据流程图和数据字典的准确性和完整性保证了系统的稳定性和可靠性五、总结通过学生成绩管理系统数据流程图及数据字典的详细介绍,我们可以更好地理解系统的数据流动和结构,为系统的开辟、维护和升级提供了重要参考。
数据结构-学生成绩管理系统课程设计
“数据结构与算法”课程设计报告*课程设计题目;要求:完成学生成绩的录入、统计、查询、修改、删除、输出。
(一)需求和规格说明1、软件其本身应是一个大的分支系统,每个分支都对应系统的一项功能。
在数据通过系统主功能输入完成后,通过调用各个子功能对数据进行相应的处理,达到相应的目的。
2、系统中首相要解决的问题就是信息的存储,学生的信息包含多方面的内容,必须用类或结构体去存储。
原题目中要求学生学号num用int类型的变量来存储,但实际情况下此设计并不妥,所以在系统设计的过程中,我用了一个长度为10的char类型的数组来存储学号,基本满足了实际应用的基本要求。
实际设计时系统的数据表如下3、由于系统本身为一个管理系统,所以设计过程中应采用交互式的方式方便操作者的使用,由于没有采用图形界面,所以可以通过循环弹出功能菜单的方式实现。
4、在系统各项子功能实现的过程中,需要通过编写函数,调用库函数等方式以实现字符串操作、指针操作、文件操作等,以达到系统中各项功能的不同要求。
(二)设计1、设计思路(1)、结构体的定义代码如下:struct data{char Name[n]; //姓名char Class[n]; //班级char Number[n]; //学号float cprog,media,eng,math,sport; //各科成绩float sum; //总分float ave; //平均数int order; //名次};typedef data *Infor;通过以上定义,将单个学生的各项基本信息封装到了一个名为Infor的结构体变量中。
另外,为了在系统中方便实现排序、查询、删除等功能,在头文件func.h 中又定义了一个Infor类型的数组stu[maxnum](maxnum为宏变量,大小为999),该数组默认可以存储999名学生的信息,如此一来,便大大简化了排序等功能的实现难度。
(2)、系统框架此系统大体框架由三个层次构成,依次为系统主菜单,主功能下设的子菜单及最底层菜单下的功能实现。
(完整word版)数据结构课程设计(学生成绩管理系统)(word文档良心出品)
目录一、运行环境 0一、运行环境 (1)二、设计目的和意义 (1)2.1设计目的 (1)2.2设计意义 (1)三、算法思想 (1)四、模块划分 (4)五、数据结构 (5)六、程序流程图 (6)七、程序源代码 (8)八、程序调试过程分析 (18)九、测试数据 (18)十、测试结果及分析 (19)十一、小结 (23)参考文献 (24)一、运行环境硬件环境:电脑软件环境:vc++6.0二、设计目的和意义2.1设计目的此次课程设计的目的是让学生在学习完C、数据结构等课程基础上,进一步掌握设计、实现较大系统的完整过程,包括系统分析、编码设计、系统集成、以及调试分析,熟练掌握数据结构的选择、设计、实现以及操作方法,为进一步的应用开发打好基础。
2.2设计意义此次设计意义在于让我们更好的去掌握C的基本语法、函数以及Visual C++集成编译环境。
掌握树、图、链表等基本数据结构及其应用。
掌握程序流程以及基本应用方法。
应用软件工程方面的知识,熟悉软件开发的流程。
通过本课程设计,培养学生进行软件设计能力。
首先进行需求分析,针对目标对象完成程序结构设计、对象设计、主要数据结构设计、输入输出设计、人机界面设计等。
三、算法思想整个系统除了主函数外,另外还有12个函数,实现十大功能:菜单选择、输入功能、显示功能、查找功能、删除功能、排序功能、插入功能、保存功能、读取功能、修改。
各个函数的详细设计说明分别如下:1、主函数 main()利用无限次循环for(;;)和swithch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。
2、初始化函数 STUDENT *init()这是一个无参函数,里面只有一个语句,它的作用是使链表初始化,使head的值为NULL。
比如:没有这个函数的话,在你没有输入任何数据的情况下,去执行显示功能的时候会显示一些乱码!3、菜单选择函数 int menu_select();这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的九大功能,根据每个功能前面的序号进行选择,中间还显示系统当前的时间。
数据结构 学生成绩管理系统报告
数据结构课程设计报告网络工程11011108020110xxx一、需求分析设计一个学生成绩管理系统程序,实现对学生资料的录入、浏览、插入和删除等基本功能。
设置合理的数据结构,每个学生记录包含的信息要有学号、姓名和各门功课的成绩。
由题可知,成绩管理系统对学生资料的录入、浏览、插入、删除。
可以用单向链表实现,将其存储在二进制文本中。
二、概要设计从图中可知,成绩管理系统共分为7个功能模块,分别为显示成绩信息、添加成绩信息、修改成绩信息、删除成绩信息、按学号查询成绩、按姓名查询成绩、保存并退出。
其中当系统运行时,自动写入原来的成绩表.dat文件,如果没有则没有创建。
退出时默认将其写入成绩表.dat文件。
三、详细设计系统使用单链表作为数据结构,其中一个节点学生的学号、姓名、语文成绩、英语成绩作为数据域,另一部分作为指针域。
如下图为一个节点的结构:void PrintTitle();//显示标题函数void PrintScore(score);//输出学生成绩信息函数void Read();//读入文件函数void Write();//写入文件函数void View();//显示成绩表函数void Add();//添加成绩函数void Delete();//删除学生信息函数void Edit();//修改学生信息函数void FindByNumber();//按学号查询void FindByName();//按姓名查询void PrintTitle():其功能是输出如下一行文字,用于每次输出的标题栏显示功能void PrintScore(score):用于输出学生的信息,以一定的间隔输出。
printf(" %10s",s.Number);printf(" | %-6s",);printf(" | %-3s",s.Chinese);printf(" | %-3s\n",s.English);void Read():用于读出已存储在成绩表.dat中的学生成绩信息,并将读取的信息存储在单向链表中。
数据结构课程设计——成绩管理系统
数据结构课程设计(1)学生成绩管理问题(建议数据结构:单链表)学生成绩管理是学校教务管理的重要组成部分,其处理信息量很大,本设计是对学生的成绩管理做一个简单的模拟,用菜单选择操作方式完成下列主要功能:(1)登记学生成绩;(2)查询学生成绩;(3)插入学生成绩;(4)删除学生成绩;要求对每个功能分别用函数实现。
(2)学生成绩管理系统需求与功能分析学生成绩的录入、统计、查询、修改、删除、输出。
画出功能结构图。
(3)学生成绩管理系统的数据结构表序号成员名(字段名)数据类型长度字段含义1 class_0 char 20 班级2 num int 学号3 name char 8 姓名4 elec flaot 电子技术5 c_prog float C 程序设计6 media flaot 多媒体技术7 eng float 大学英语8 math float 高等数学9 sport float 大学体育10 polity float 马克思主义政治经济学11 ave float 平均成绩12 order int 名次(4)学生成绩管理系统测试数据表class_0 num name elec c_prog media eng math sport polity ave order网络30331 3033101 办公费80 70 60 70 70 60 80 表中其余数据自己编造。
(5)使用链表编写程序(手写源程序代码,并给出注解)0)定义链表结点1)主函数main():定义链表头指针,调用录入、统计等函数对成绩表进行处理;2)建立链表函数Create():输入班级到政治课成绩信息;3)统计函数Statistic():计算平均成绩;4)查询函数Lookup():查询指定学号学生成绩记录;5)修改函数Modify():修改指定学号学生成绩记录;6)删除函数删除():删除指定学号学生记录;7)输出函数Output():输出班级所有学生成绩记录;8)插入函数Insert():按平均分顺序插入新结点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
声明整形变量i和count,其中记录输出的学生序数,count用来接收调用浏览函数时所传递过来的实参,将其值传递给导出函数load(m),使得导出的学生人数与浏览的学生人数保持一致。通过调用load函数后(即给em数组赋值),用for循环输出每一个学生的各种信息。
3.排序模块
声明整形变量i,j和结构体变量structstudenttemp,用for循环实现排序功能,利用冒泡法,以st[i].total<st[j].total为条件进行排序。最后用printf输出排序结果。
char a;
do
{
printf("请选择你需要操作的步骤(1--4):\n");
scanf("%d",&n);
if(n>=0&&n<=4)
{
flag=1;
break;
}
else
{
flag=0;
printf("您输入有误,请重新选择!");
}
}
while(flag==0);
while(flag==1)
4.查找模块
声明整型变量k,先用printf语句显示查询菜单,用scanf输入选择的查询方式的代号,用switch(k)进入所选择的具体查询函数,包括学号查询,姓名查询两种方式。
学号查询中,用scanf语句输入需要查询的学号,并赋值给num。用for循环,循环主体判断em[i].num中是否有输入的学号。如果有,用printf语句输出与学号相对应的该学生的所有信息,再跳出循环。按姓名查询与此方法类似,不再叙述。
六.测试与调试
1.运行程序,进入主菜单
2.输入数字“1”,创建学生信息
3.输入数字“2”,浏览学生信息
4.输入数字“3”,按总分排序
5.输入数字“4”,查询学生信息
选择查询方式“1”
选择查询方式“2”
七.源程序清单
#include <>
#include <>
#include <>
struct student
按学号查询函数
按姓名查询函数(同上)
五.详细设计
1.录入模块
定义一个结构structstudent和数组st[N]用来储存N个学生的所有信息(学号st[i].num、姓名st[i].name、佛学成绩st[i].fgrade、C语言成绩st[i].cgrade、英语成绩st[i].egrade)。通过for循环输入所有学生信息。用printf语句提示需要输入的内容,接着用scanf语句输入相应内容。输入完毕后套用保存函数save(m)将所输入的信息写入指定文件。
程序运行时显示一个简单的菜单,例如:
(1)信息输入(INPUT)
(2)总分统计(COUNT)
(3)总分排序(SORT)
(4)查询(QUERY)
其中:
(1)对4个学生的信息进行输入;
(2)对每个学生的3门课程统计总分;
(3)对4个学生的总分按降序排序并显示出来;
(4)查询输入一个学号后,显示出该学生的有关信息;
学生成绩管理系统数据结构
洛 阳 理 工 学 院
课程设计报告
课程名称数据结构课程设计
设计题目学生成绩管理系统
专 业计算机科学与技术
课 程 设 计 任 务 书
设计题目:学生成绩管理系统
设计内容与要求:
编写一个简单的学生信息管理程序,能实现对学生信息的简单管理。
建立一个4个学生的信息登记表,每个学生的信息包括:学号,姓名,和3门课程的成绩(FOX,C,ENGLISH)。
课 程 设 计 评 语
成绩:
指导教师:_______________
年 月 日
一.问题描述
编写一个简单的学生信息管理程序,能实现对学生信息的简单管理。
二.基本要求
建立一个4个学生的信息登记表,每个学生的信息包括:学号,姓名,和3门课程的成绩(FOX,C,ENGLISH)。
程序运行时显示一个简单的菜单,例如:
scanf("%c",&a);
if(a=='y')
{
flag=1;
system("cls"); /*清屏*/
{
switch(n)
{
case 1:printf("\n ◆◆◆输入学生信息◆◆◆\n");printf("\n");input();break;
case 2:printf("\n ◆◆◆浏览学生信息◆◆◆\n");printf("\n");display();break;
case 3:printf("\n ◆◆◆按总分排序◆◆◆\n");printf("\n");sort_totum[10];/*学号*/
char name[20];/*姓名*/
int fgrade;/*佛学成绩*/
int cgrade;/*C语言成绩*/
int egrade;/*英语成绩*/
int total;/*总分*/
}st[100];
四.总体设计
1.结构图
2.流程图
录入函数
排序函数
查询函数
(1)信息输入(INPUT)
(2)总分统计(COUNT)
(3)总分排序(SORT)
(4)查询(QUERY)
其中:
(1)对4个学生的信息进行输入;
(2)对每个学生的3门课程统计总分;
(3)对4个学生的总分按降序排序并显示出来;
(4)查询输入一个学号后,显示出该学生的有关信息;
三.数据结构
struct student
void save();
void display();
void search();
void search_num();
void search_name();
void sort_total();
int load();/*定义各函数*/
int m;
void main()
{
menu();
int n=0,flag;
case 4:printf("\n ◆◆◆查询学生信息◆◆◆\n");printf("\n");search();break;
case 0:exit(0);break;
default:break;
}
getchar();
printf("\n");
printf("是否继续运行(y or n):\n");
{
char num[10];/*学号*/
char name[20];/*姓名*/
int fgrade;/*佛学成绩*/
int cgrade;/*C语言成绩*/
int egrade;/*英语成绩*/
int total;/*总分*/
}st[100];
void menu();
void input();
void save(int m);