学生成绩管理实习报告_第1页
学生成绩管理实习报告_第2页
学生成绩管理实习报告_第3页
学生成绩管理实习报告_第4页
学生成绩管理实习报告_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机实习报告选题任务:学生成绩管理主要功能(1)能按学期、按班级完成对学生成绩的录入、修改(2)能按班级统计学生的成绩,求学生的总分及平均分,并能根据学生的平均成绩进行排序(3)能查询学生成绩,不及格科目及学生名单(4)能按班级输出学生的成绩单(5)能将输入的数据以文件的形式存盘(6)能将原来已经存盘的文件读入内存,进行管理能实现以上基本功能,界面友好、清晰l 设计思想:要想用c语言模拟数据库表文件进行对文件的增删改操作,我首先想到用链表存储结构。因为如果采用数组存储结构或采用顺序表存储结构,在删除和增加新的数据时需要移动插入点后面的所有数据记录,当所存储的数据相当多而且要增加或删除的数据不

2、在存储的结尾的话,将需要大量的时间进行数据的挪动,这需要计算机进行大量的运算并耗时较久,对日后繁多的数据进行增删修改维护时带来极大的不便。相反采用链表存储结构,每次增删操作只需要修改节点指针的指向即可,不管存了多少数据都不需要挪动任何数据,既方便又快捷,而且易于实现和快速操作。要想库表存放的每个学生数据项包括:学号,姓名,性别,年龄和奖学金等内容,我想到建立一个名为student的结构,里面相对应的设以下变量:num(学号),name(姓名),sex(性别),age(年龄),prize(奖学金),score(成绩)。增加和删除只要修改被操作节点的指针指向即可实现,修改节点数据也只需要把该节点存

3、放的内容调出来,然后重新输入,覆盖之前的内容再存回去即可实现。具体的程序代码和实现过程如下:1 我选用的链表存储结构是:单链表动态分配存储结构,以及考虑到将要进行的操作,头文件及存储结构体如下:#include stdio.h#include iostream.h#include malloc.h#include iomanip.h /*为使用控制符 setw 提供头文件 */#include string.h#define null 0#define len sizeof(struct student)struct student /*建立一个学生数据的结构体*/long num;char

4、name20;char sex4;int age;float score;int prize;struct student *next;2 我建立的调用函数如下:struct student *creat(void) /*定义建立新表的函数,此函数带回一个指向链表头节点的指针 */struct student *del(struct student *head,long num) /*按指定的学号删除对应的记录数据*/struct student *insert(struct student *head,struct student *stud) /*增加新的记录数据*/struct stud

5、ent *modify(struct student *head) /*修改已有的记录数据*/void locate_num(struct student *head,long num) /*依指定的学号进行查询*/void locate_name(struct student *head,char name20) /*依指定的姓名进行查询*/void print(struct student *head) /*输出记录数据*/void exchange(struct student *p1,struct student *p2) /*交换两节点间的记录数据*/struct student *

6、sort_num(struct student *head,int k) /*按学号升序排列*/struct student *sort_name(struct student *head,int k) /*按姓名升序排列*/struct student *sort_age(struct student *head,int k) /*按年龄升序排列*/struct student *sort_score(struct student *head,int k) /*按成绩升序排列*/struct student *sort_prize(struct student *head,int k) /*

7、按获奖情况升序排列*/void save(struct student *head,int k) /*保存输入的所有记录数据*/void open_file(struct student *head,int k) /*打开已保存的所有记录数据*/void main()l 程序框图:1我的主函数main()的程序框图如下:开始选择操作建立新表是否开始建表creat()选择操作输出删除增加查询修改打开保存1234567退出数据库系统是是否继续操作结束是否2连接的是各排序输出函数,流程图如下所示:1选择以何排序输出默认学号姓氏年龄成绩获奖情况开始结束print()输出数据而每一种排序输出的流程图如下

8、(已默认排序学号排序为例,其余同):exchange()交换节点间的数据j k ?i num) & (p1-next!=null)p2=p1;p1=p1-next;num=p1-num?p1=headhead=p1-next;p2-next=p1-next;输出记录数据不存在该学生的记录return(head)结束成立不成立是否是否4连接的是插入节点数据的函数,流程图如下所示:3开始head=null(p0-nump1-num)&(p1-next!=null)p0-numnumhead=p1n=n+1;return(head);p2=p1;p1=p1-next;p1-next=p0;p0-ne

9、xt=nullp2-next=p0p0-next=p1;结束是p0=(struct student *)malloc(len);head=p0;p0-next=null否是否成立不成立否是5连接的是查询已有记录的函数,流程图如下所示:开始4cinj选择查询方式以学号查询以姓名查询默认为学号查询cinlocatenumcinlocatenamecinlocatenumlocate_num()locate_name结束而所被调用的locatenum()和locatename()函数的流程图如下所示:以学号查询locatenum()为例,locatename()同p=p-next开始p-num!=n

10、ump-num=num输出记录数据不存在该学生的记录!结束成立不成立是6连接的是修改节点数据的函数,流程图如下所示:开始5cinnumnum!=0p-num!=numcinnum(strcmp(p-name,name)!=0p=p-next(p-num=num)|(strcmp(p-name,name)=0)输出记录数据不存在该学生的记录return(head)结束p=p-next是否不成立成立成立不成立是否7连接的是打开文件的函数,流程图如下:开始0=ifread()读文件结束(fp=fopen(student_record.txt,r+)=null输出记录数据fclose()关闭文件p=p

11、-next;i+;inext;i+;inum与p1-num相比较,如果p0-num p1-num,则待插入的节点不应插在p1所指的节点之前。此时将p1后移,并使p2指向刚才p1所指的节点。再将p1-num与p0-num比。如果仍然是p0-num大,则应使p1继续后移,直到p0-nump num为止。这时将p0所指的节点插到p1所指节点之前。但是如果p1所指的已是表尾节点,则p1不再后移。如果p0-num比所有节点的num都大,则应将p0所指的节点插到链表表尾。如果插入的位置既不在第一个节点之前,又不在表尾节点之后,则将p0的值赋给p2-next,使p2-next指向待插入的节点,然后将p1的值

12、赋给p0-next,使得p0-next指向p1指向的变量。这时,在第一个节点和第二个节点之间已插入了一个新节点。如果插入位置为第一个节点之前(即p1等于head时),则将p0赋给head,将p1赋给p0-next.如果要插到表尾之后,应将p0赋给p1-next,null赋给p0-next.其次是在main函数调用insert()时出现死循环,最后究其原因在于:stu是有一个固定地址的结构体变量。第一次把stu节点插入到链表中。第二次再用它来插入到第二个节点,就把第一次节点的数据冲掉了。实际上并没有开辟两个节点。为了解决这个问题,必须在每插入一个节点是新开辟一个内存区。此后能删除多个节点直到输入要删的学号为0,能插入多个节点直到输入要插入的学号为0。2总结: 回顾

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论