基于链表的学生信息管理系统实验报告_第1页
基于链表的学生信息管理系统实验报告_第2页
基于链表的学生信息管理系统实验报告_第3页
基于链表的学生信息管理系统实验报告_第4页
基于链表的学生信息管理系统实验报告_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、C语言程序设计实训2报告设计题目:基于链表的学生信息管理系统学院名称:信息科学技术学院专业:软件工程班级:x班姓名:XXX学 号XXX提交日期:2014年6月、实验内容编写并调试程序,实现学校各专业班级学生信息的管理。定义学生信息的链表结点类型,包 括:学号、姓名、班级、专业、3门成绩。二、实验要求main函数:以菜单形式将各项功能提供给用户,根据用户的选择,调用相应的函数。(2)定义函数CreateList :按学号由小到大,建立有序的链表。逆序输入n个学生信息(调用 n次in put),学号大的先输入,建立带头结点的单链表。定义函数Output :以指向某个学生结点的指针为参数,将学生信息

2、表格化输岀。(4) 定义函数Save:将某个学生信息存入文件。(5) 定义函数Fetch :从文件中随机读取某个学生的信息。定义函数Search_num :查找指定学号的学生,返回指向该学生结点的指针。(7) 定义函数InsertList :在函数中输入一个学生的信息,将该学生信息插入到链表中的相应位置,并保持此链表按学号的有序性。(8) 定义函数Delete_num :从链表中删除指定学号的学生。(9) 定义函数Search_major _subject_score :查找某个专业的、某门课程的成绩小于某个分数的学生,返回指向该学生结点的指针。(10) 定义函数Delete_ major _

3、subject :从链表中删除某个专业的、某门课程的成绩小于某个分数的学生。三、算法流程图四、程序清单(关键语句和变量加注释)#in clude 预编译命令#in clude#in cludestruct stude ntint num;/ 学号char name15; 姓名char major10;/ 专业( computer,software,network ) int classNo;/ 班级 (1-2)int score3;/3 门课的成绩 (0-2)struct student *next;typedef struct student STU;/ 输入 STU *Input()STU

4、 *p;if( (p=(STU*)malloc(sizeof(STU)=NULL)printf( 头结点建立错误!n);return p;printf( 请输入学生的学号:);scanf(%d,&p-num);printf( 请输入学生的姓名:);scanf(%s,p-name);printf( 请输入学生的专业:);scanf(%s,p-major);printf( 请输入学生的班级:);scanf(%d,&p-classNo);printf( 请输入学生的成绩0:);scanf(%d,&p-score0);printf( 请输入学生的成绩1:);scanf(%d,&p-score1);pr

5、intf( 请输入学生的成绩2:);scanf(%d,&p-score2);return p;/建立链表STU*CreateList(int n)struct student*head,*p,*w;int i=0;printf(n 请输入第 %d 个学生信息 n,n);p=Input();while(inext=NULL;elseprintf(n 请输入第 %d 个学生信息 n,n-i+1);w=Input();head=w;w-next=p;p=w;return head;/ 输出 void Output(STU *p)printf(%dt%st%st%dt%dt%dt%dn,p-num,p

6、-name,p-major,p-classNo,p-score0,p-score1 ,p-score2);/ 输出所有 void print(STU *head)STU *p;p=head;if(head!=NULL)printf( 学号 t 姓名 t 专业t 班级 t 成绩 0t 成绩 1t 成绩 2tn);while(p!=NULL)Output(p); p=p-next;/ 储存 void Save(STU*p)FILE*fp;char filename20;printf(n 请输入保存文件名: n); gets(filename);if(fp=fopen(filename,wb)=NU

7、LL) printf(cannot open filen); return;if(p=NULL) printf( 链表为空 );while(p!=NULL) if(fwrite(p,sizeof(STU),1,fp)!=1) printf(nwrite file errorn);p=p-next; fclose(fp);/ 文件查找 STU Fetch(int n)FILE*fp;struct student tem;char filename20;printf(n 请输入打开文件名 :n); gets(filename);fp=fopen(filename,rb); fseek(fp,(lo

8、ng)(n*sizeof(STU),0);fread(&tem,sizeof(STU),1,fp);/ 读取 fclose(fp);return tem;/ 查找学号 STU *Search_num(STU *head,int number)if (head=NULL)return NULL;while(head-num!=number)/ 跳过不符合条件的学号 if (head-next=NULL)return NULL;head=head-next;return head;/ 返回的指针名为 head/ 插入链表 STU*InsertList(STU*head)STU*p1,*p2,*st

9、u;p1=p2=head; stu=(STU*)malloc(sizeof(STU);/ 待插入的结点 printf(n 请输入要插入的学生信息 n); stu=Input();if(head=NULL)/ 头结点为空head=stu;stu-next=NULL;else跳过不符合的结点while(p1-numnum&p1-next!=NULL)/p2=p1;p1=p2-next;if(p1-numstu-num)if(p1=head)/ 插最前面stu-next=head;head=stu;elsestu-next=p1;p2-next=stu;elsep1-next=stu;/ 插最后面

10、stu-next=NULL;return head;/ 学号删除 STU *Delete_num (STU *head,int number)STU *p1,*p2;if ( head=NULL) / 头结点为空return NULL;p1=head;while(p1-num!=number)/ 跳过不符合的点if (p1-next=NULL)return NULL;p2=p1;p1=p1-next;if (p1=head) / 删除学号是第一个的情况head=p1-next;elsep2-next=p1-next;free(p1); return head;/ 查找专业课程成绩 STU *S

11、earch_major_subject_score(STU *head,char *major,int number,int score) if (head=NULL)return NULL;while(head!=NULL)if (strcmp(major,head-major)=0) & head-scorenumbernext;return head;/ 删除专业课程成绩 STU *Delete_major_subject(STU *head,char *major,int number,int score) STU *p=NULL;p=Search_major_subject_scor

12、e(head,major,number,score);/ 先查找 if (p=NULL)return p;else p=Delete_num(head,p-num);/ 再删除return p;/ 主函数 void main ()STU *Head = NULL; int id,num,sco;char filename10; STU *p = NULL;STU stu;while(1)printf(*n);printf(*欢迎使用学生成绩管理系统*n);printf(*n);2-信息存盘 n);printf(1- 建立有序的链表n);printf(3- 从文件中随机读取某个学生的信息4-查找

13、学号学生,返回该学生结点指针printf(5- 输入一个学生信息插入相应位置6-从链表中删除指定学号的学生 n);printf(7- 查找某专业某课程成绩小于某分数的学生,返回指向该学生结点的指针 n);printf(8- 删除某个专业的、某门课程的成绩小于某个分数的学生 n);printf(9- 将学生信息表格化输出 nn);printf(*输入相应编号运行系统*n);scanf( %d,&id);if(id9)break;switch (id)case 1: printf( 请输入学生数 :); scanf( %d,&num);Head = CreateList(num); break;

14、case 2:if (Head=NULL) printf( 链表未建立 !n); break; getchar(); Save(Head); break; case 3:printf(n 请问要读取第几位学生信息 n); scanf(%d,&id);getchar(); stu=Fetch(id);t 班级 t 成绩 0t 成绩 1t 成绩 2tn);printf( 学号 t 姓名 t 专业 Output(&stu);case 4:if (Head=NULL)printf( 链表未建立 !n); break;printf( 请输入要查找的学生的学号 :);scanf( %d,&num);p =

15、 Search_num(Head,num);if (p=NULL)printf( 查找失败 !n);elseprintf( 学号 t 姓名 t 专业t 班级 t 成绩 0t 成绩 1t 成绩 2tn);Output(p); break;case 5:Head=InsertList(Head);break;case 6:if ( Head = NULL)printf( 链表未建立 !n);break;printf( 请输入要删除的学生的学号: );scanf( %d,&num);p = Delete_num(Head,num);if ( p=NULL)printf( 删除成员失败 !n);els

16、e Head = p;case 7:if (Head=NULL)printf( 链表未建立 !n);break;printf( 请输入学生的专业 :);scanf(%s,filename);printf( 请输入成绩序号 (0 = n =2):); scanf( %d,&num);if (num2)printf( 成绩序号输入错误 );break;printf( 请输入分数 :);scanf( %d,&sco); p=Search_major_subject_score(Head,filename,num,sco); if ( p = NULL)printf( 查找失败 n);else printf( 学号 t 姓名 t 专业 t 班级 t 成绩 0t 成绩 1t 成绩 2tn); Output(p);break;case 8:if (Head=NULL)printf( 链表未建立 !n);break;printf( 请输入学生的专业 :);scanf(%s,filename);printf( 请输入成绩序号 (0 = n =2):); scanf( %d,&num);if (num 2)printf( 成绩序号输入错误 );break;printf(

温馨提示

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

最新文档

评论

0/150

提交评论