
学生成绩管理系统测试总结报告
《软件测试》课程报目:学生成绩管理系统院系:计科学学院班级:软件一班:田欣1.测试概述1.1测试目的对学生成绩管理系统项目中所有的软件测试活动中,包括测试进度、资源、问题、风险以及测试组和其他组间的协调等进行评估,总结测试活动的成功经验与不足,以便今后更好的开展测试工作。
熟悉掌握软件测试的活动,以及练习学习的Java程序设计。
学生成绩管理系统使用了全新的成绩管理理念,系统从完善的基础信息管理,和对创建新用户、已创建的成绩数据的录入,修改,浏览,统计等功能操作,基本能够满足各高校教师的需要。
对此次项目中的所有软件测试活动中,包括测试内容,进度,以及存在的问题,会产生哪些风险有一个详细的了解,有利于以后做项目时的,对此类错误的避免或改正。
1.2测试范围学生成绩管理系统测试项目主要管理学生的成绩及其存档信息,只对系统的功能和时间进行测试,其性能不在测试范围之内。
主要功能包括:用户管理、查询管理、成绩录入管理、更新管理、统计管理、注册管理等。
用户管理:设置了权限管理功能,学生用户只能查询成绩信息,管理员可以完成其他操作。
查询管理:包括查询成绩和基本信息。
可以显示单独一条记录,也可以显示所有信息。
成绩录入管理:每次考试结束,管理员录入学生成绩信息。
更新管理:当有需要时,管理员可以进行成绩和信息的删除和修改操作。
统计管理:统计学生人数,缺考人数,平均成绩和不及格人数。
1.3参考资料1.4预期
求一份学生成绩管理系统实验报告
可以更快的使学生绩相加并且排名,这对来说是很好可少很多工作量,在多课考试时很有用,只要成绩出来,输入电脑就可以在几秒内是成绩相加,并知道了某学生在学校排名,但对学生来说,考完试自由的时间就很少了
学生成绩管理程序总结的附录一般是写什么的
#include#include#include #include #include#define LEN sizeof(struct student)typedef struct student{ long numb; int chinese; int math; int english; int totalscore; char name[12]; struct student *next;} STU;\\\/\\\/声明部分STU* creat();void output(STU *head);STU* creatByN(int num);STU* findByNumb(STU *head, long num);STU* findByNumbEx(STU *head, long num, STU **ppBefore);STU* findByName(STU *head, char *name);void find(STU *head);STU* del(STU *head);STU* insert(STU *head);void update(STU *head);STU* sort(STU *head);void save_info(STU *head);STU *load_info();void Backup_info(STU *head);int n;\\\/\\\/全局变量void main(){ STU *head; int choice; for(;;){;\\\/*清屏*\\\/ printf(\\\欢迎使用成绩管理系统\\\\\\ ); printf(\\\1:输入多个学生信息\\\\\\ ); printf(\\\2:显示全部学生信息\\\\\\ ); printf(\\\3:删除\\\\\\ ); printf(\\\4:查找\\\\\\ ); printf(\\\5:插入\\\\\\ ); printf(\\\6:修改\\\\\\ ); printf(\\\7:排序\\\\\\ ); printf(\\\8:保存到文件\\\\\\ ); printf(\\\9:从文件加载\\\\\\ ); printf(\\\10:备份\\\\\\ ); printf(\\\0:退出\\\\\\ ); printf(*请输入数字(0-9)进行功能选择 :); scanf(%d,&choice); if(choice==0) break; switch(choice){ case 1: head=creat(); break; case 2: output(head); break; case 3: head=del(head); break; case 4: find(head); break; case 5: head=insert(head); break; case 6: update(head); break; case 7: head=sort(head);break; case 8: save_info(head); break; case 9: head=load_info(); break; case 10:Backup_info(head);break; } printf(按任意键继续....\\\ ); getch();\\\/*暂停*\\\/ } printf(欢迎使用,再见
\\\ );}STU *creat()\\\/*创建链表*\\\/{ STU *head,*pnew,*ptail; head=NULL; n=0;\\\/\\\/初始化 printf(现在进行学生信息的输入,学号输入为0时结束\\\ ); while(1) { \\\/\\\/不断申请新节点 pnew=(STU *)malloc(LEN); printf(学号\\\姓名\\\语文\\\数学\\\英语\\\总分\\\ ); scanf(%ld,&pnew->numb); if(pnew->numb==0) break; scanf(%s,pnew->name); scanf(%d%d%d,&pnew->chinese,&pnew->math,&pnew->english); pnew->totalscore=0; pnew->totalscore=pnew->chinese+pnew->math+pnew->english; pnew->next=NULL;\\\/\\\/将节点连接到链表尾部 n++; if(n==1){ head=pnew; ptail=pnew; } else{ ptail->next=pnew; ptail=pnew; }\\\/\\\/这个算法的思路是让pnew指向新开辟的结点,ptail指向链表中最后一个结点,把pnew所指的结点连接在ptail所指的结点后面,用ptail->next=pnew来实现. } return head;\\\/\\\/因为可能对head进行赋值,所以有返回值}void output(STU *head){ STU *p;\\\/\\\/定义一个可动指针,使其不断下移完成多个输出 printf(当前共有%d个节点:\\\ ,n); printf(学号\\\姓名\\\语文\\\数学\\\英语\\\总分\\\ ); for(p=head;p!=NULL;p=p->next) printf(%ld\\\%s\\\%d\\\%d\\\%d\\\%d\\\ ,p->numb,p->name,p->chinese,p->math,p->english,p->totalscore);}\\\/\\\/无变动不返回struct student *creatByN(int num){ STU *head,*pnew,*ptail; int i; \\\/\\\/链表初始化 head=NULL; n=0; \\\/\\\/链表创建,一个循环 for(i=0;inumb); scanf(%s,pnew->name); scanf(%d%d%d,&pnew->chinese,&pnew->math,&pnew->english); pnew->next=NULL;\\\/\\\/将pnew所指向的节点,插入到链表尾部 n++; if(n==1){ head=pnew; ptail=pnew; } else{ ptail->next=pnew; ptail=pnew; } } return head;}STU* findByNumb(STU *head, long num){ STU *p,*presult; presult=NULL; for(p=head;p!=NULL;p=p->next) if(p->numb==num){ presult=p;\\\/\\\/记录此时指针的位置 break; } return presult;}STU* findByName(STU *head, char *name){ STU *p,*presult; presult=NULL; for(p=head;p!=NULL;p=p->next) if(strcmp(p->name,name)==0){ presult=p; break; } return presult;\\\/\\\/位置变更有返回值}STU* findByNumbEx(STU *head, long num, STU **ppBefore){ STU *p,*presult,*pBefore; presult=pBefore=NULL; for(p=head;p!=NULL;pBefore=p,p=p->next)\\\/\\\/的前一个位置 if(p->numb==num){ presult=p; break; } *ppBefore=pBefore; return presult;}void find(STU *head){ int num,choice; STU *pr; char name[12]; printf(输入要查找的方式(1:按学号,2:按姓名):); scanf(%d,&choice); if(choice==1){ printf(输入要查找的学号:); scanf(%ld,&num); pr=findByNumb(head,num); } else if(choice==2){ printf(输入要查找的姓名:); scanf(%s,name); pr=findByName(head,name); } if(pr==NULL) printf(对不起,查无此人\\\ ); else{ printf(找到了,该生信息如下:\\\ ); printf(学号\\\姓名\\\语文\\\数学\\\英语\\\总分\\\ ); printf(%ld\\\%s\\\%d\\\%d\\\%d\\\ ,pr->numb,pr->name,pr->chinese,pr->math,pr->english,pr->totalscore); }}void update(STU *head){ int num; STU *pr; printf(输入要查找的学号:); scanf(%ld,&num); pr=findByNumb(head,num); if(pr==NULL) printf(对不起,查无此人\\\ ); else{ printf(找到了,该生信息如下:\\\ ); printf(学号\\\姓名\\\语文\\\数学\\\英语\\\总分\\\ ); printf(%ld\\\%s\\\%d\\\%d\\\%d\\\ ,pr->numb,pr->name,pr->chinese,pr->math,pr->english); printf(请输入修改信息\\\ ); printf(学号\\\姓名\\\语文\\\数学\\\英语\\\总分\\\ ); scanf(%ld%s%d%d%d%d,&pr->numb,&pr->name,&pr->chinese,&pr->math,&pr->english); pr->totalscore=0; pr->totalscore=pr->chinese+pr->math+pr->english; }}STU* del(STU *head){ long num; STU *pCur,*pBefore; \\\/\\\/查找要删除的节点,用pCur记录该节点 printf(输入要删除的学号:); scanf(%ld,&num); pCur=findByNumbEx(head,num,&pBefore); \\\/\\\/如果该节点存在,进行删除 if(pCur!=NULL){ n--;\\\/\\\/记录删除后节点个数 \\\/\\\/根据pCur所指节点位置进行判断:头节点或后续节点 \\\/\\\/删除的是头节点 if(pCur==head){ head=pCur->next; } \\\/\\\/删除的是后续节点 else{ \\\/\\\/获取前向节点指针pBefore \\\/\\\/利用pBefore和pCur完成删除 pBefore->next=pCur->next; } } return head;}STU* insert(STU *head){ STU *pCur,*pnew,*pBefore,*p; \\\/\\\/申请一个新节点,并赋值 pnew=(STU *)malloc(LEN); printf(学号\\\姓名\\\语文\\\数学\\\英语\\\总分\\\ ); scanf(%d,&pnew->numb); scanf(%s,&pnew->name); scanf(%d%d%d,&pnew->chinese,&pnew->math,&pnew->english); pnew->totalscore=0; pnew->totalscore=pnew->chinese+pnew->math+pnew->english; pnew->next=NULL; if(head==NULL)\\\/\\\/链表为空 head=pnew; else{\\\/\\\/链表不为空 \\\/\\\/找位置,即获取pCur for(p=head;p!=NULL;pBefore=p,p=p->next) if(p->numb > pnew->numb){ pCur=p; break; } \\\/\\\/没有找到pCur,则应将pnew插入到尾节点之后 if(p==NULL){ pBefore->next=pnew; } \\\/\\\/找到pCur,则应将pnew插入到pCur之前,根据pCur的位置分为:头结点之前和中间节点之前两种情况 else{ \\\/\\\/pCur是头结点 if(pCur==head){ pnew->next=pCur; head=pnew; } \\\/\\\/pCur是中间结点 else{ pnew->next=pCur; pBefore->next=pnew; } } } n++; return head;}STU* sort(STU *head) { STU *first; \\\/*排列后有序链的表头指针*\\\/ STU *tail; \\\/*排列后有序链的表尾指针*\\\/ STU *p_min; \\\/*保留键值更小的节点的前驱节点的指针*\\\/ STU *min; \\\/*存储最小节点*\\\/ STU *p; \\\/*当前比较的节点*\\\/ (STU *)malloc(LEN);first = NULL; while (head != NULL) \\\/*在链表中找键值最小的节点。
*\\\/ { \\\/*注意:这里for语句就是体现选择排序思想的地方*\\\/ for (p=head,min=head; p->next!=NULL; p=p->next) \\\/*循环遍历链表中的节点,找出此时最小的节点。
*\\\/ { if (p->next->totalscore < min->totalscore) \\\/*找到一个比当前min小的节点。
*\\\/ { p_min = p; \\\/*保存找到节点的前驱节点:显然p->next的前驱节点是p。
*\\\/ min = p->next; \\\/*保存键值更小的节点。
*\\\/ } } \\\/*上面for语句结束后,就要做两件事;一是把它放入有序链表中;二是根据相应的条件判断,安排它离开原来的链表。
*\\\/ \\\/*第一件事*\\\/ if (first == NULL) \\\/*如果有序链表目前还是一个空链表*\\\/ { first = min; \\\/*第一次找到键值最小的节点。
*\\\/ tail = min; \\\/*注意:尾指针让它指向最后的一个节点。
*\\\/ } else \\\/*有序链表中已经有节点*\\\/ { tail->next = min; \\\/*把刚找到的最小节点放到最后,即让尾指针的next指向它。
*\\\/ tail = min; \\\/*尾指针也要指向它。
*\\\/ } \\\/*第二件事*\\\/ if (min == head) \\\/*如果找到的最小节点就是第一个节点*\\\/ { head = head->next; \\\/*显然让head指向原head->next,即第二个节点,就OK*\\\/ } else \\\/*如果不是第一个节点*\\\/ { p_min->next = min->next; \\\/*前次最小节点的next指向当前min的next,这样就让min离开了原链表。
*\\\/ } } if (first != NULL) \\\/*循环结束得到有序链表first*\\\/ { tail->next = NULL; \\\/*的最后一个节点的next应该指向NULL*\\\/ } head = first; return head; } \\\/\\\/保存void save_info(STU *head){ STU *p; FILE *fp; char filename[20]; printf(输入保存文件的文件名:); scanf(%s,filename); if((fp=fopen(filename,w))==NULL){ printf(can not open the file); exit(0); } fprintf(fp,当前共有%d个节点:\\\ ,n); fprintf(fp,学号\\\姓名\\\语文\\\数学\\\英语\\\总分\\\ ); for(p=head;p!=NULL;p=p->next) fprintf(fp,%ld\\\%s\\\%d\\\%d\\\%d%\\\%d\\\ ,p->numb,p->name,p->chinese,p->math,p->english,p->totalscore); fclose(fp); printf(保存成功
\\\ );}\\\/\\\/加载STU *load_info(){ STU *head,*pnew,*ptail; FILE *fp; char filename[20],secondLine[20]; int num,i; printf(输入读取文件的文件名:); scanf(%s,filename); if((fp=fopen(filename,r))==NULL){ printf(can not open the file); exit(0); } fscanf(fp,当前共有%d个节点:,&num); \\\/\\\/过滤第二行 for(i=0;i<6;i++) fscanf(fp,%s,secondLine); \\\/\\\/链表初始化 head=NULL; n=0; \\\/\\\/链表创建,一个循环 for(i=0;inumb,&pnew->name,&pnew->chinese,&pnew->math,&pnew->english,&pnew->totalscore); pnew->next=NULL; \\\/\\\/将pnew所指向的节点,插入到链表尾部 n++;\\\/\\\/记录加载后节点个数 if(n==1){ head=pnew; ptail=pnew; } else{ ptail->next=pnew; ptail=pnew; } } fclose(fp); printf(读取成功
\\\ ); return head;}void Backup_info(STU *head)\\\/\\\/备份{ FILE *in,*out; char infile[10],outfile[10]; printf(Enter the inflie name:\\\ ); scanf(%s,infile); printf(Enter the outflie name:\\\ ); scanf(%s,outfile); if((in=fopen(infile,r))==NULL) {printf(cannot open infile\\\ ); exit(0); } if((out=fopen(outfile,w))==NULL) {printf(cannot open outfile\\\ ); exit(0); } while(! feof(in)) fputc(fgetc(in),out); fclose(in); fclose(out); printf(备份成功
\\\ );}
C语言学生成绩管理系统实训报告
这好歹是个实训啊。
。
。
你跟着老师同学一起做,不懂问他们,实在不能解决来网上问。
直接那报告目录出来算什么啊
“学生成绩管理系统设计”
编写具有查询功能的软件,可采用office软件自身的特点来进行查询、筛选等功能
跪求学生成绩管理系统。
看看这两个能不能帮到你