版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机软件技术基础实验报告实验一 线性表的基本操作班级: 通信1411 学号: 141003410122 姓名: 杨锐 1. 实验目的:理解线性表的概念;掌握线性表的基本操作;掌握线性表的建立、插入、删除、查找和输出等基本操作。2. 实验内容:利用线性表实现教师信息的管理,包括教师信息的录入、删除、查询和线性表输出,编写并调试完整的实现代码。3. 实验要求:可选择不同方法实现线性表。源程序取名exp1.c存储上传。要求独立完成设计、程序编写、调试和运行。变量名、函数名与其他同学雷同或者运行结果与其他同学雷同将被视同抄袭。主要数据结构:struct teacher/定义结构体long num;/
2、教师号char name20;/姓名char sex5;/性别int age;/年龄char edu20;/学历char title20;/职称long wage;/工资char addr100;/地址 char telep15;/电话struct teacher *next;/指向下一个结点*head=NULL;4. 主要算法流程(图):教师信息管理录入教师信息查询教师信息删除教师信息浏览教师信息退出系统5. 主要功能函数说明void key()口令检查的函数void save()把数据存入文件的函数void read()从文件读出数据的函数void creat()录入教师信息的函数void
3、 print()输出教师信息的函数void del()删除教师信息的函数void sort2()按月薪排序的函数,算法跟按教师号排序的一样void sort3()按年龄排序的函数,算法跟按教师号排序的一样void choose1()选择排序方式的函数void search1()按教师号查找的函数void search2()按姓名查找的函数void search3()按职称查找的函数,算法与按姓名查找的一样void choose2()选择查找方式的函数void menu()菜单栏函数void sort1()按教师号进行排序的函数6. 主要运行结果(截图)【登录系统界面】7. ( 用户口令为123
4、456,若输入正确,则进入系统界面)【教师信息录入】(选择1,进行教师信息的录入,按0结束输入2) 【教师信息输出】【教师信息删除】【查询教师信息】(1)按教师号查询(2)按姓名查询(3)按职称查询(4)按年龄查询【教师排序】(1) 按教师号排序(2)按年龄排序(3)按月薪排序【退出系统并保存数据】8. 实验结论及说明9. 通过本次教师信息系统的实验内容,让我明白了自己在c语言这门课程上还存有很大的问题和不足。只能通过网上借鉴并且查阅相关书籍才能完成。在编程过程中程序有时还是不能顺利执行,一些我们表面上看似成立的程序,实际上却可能根本无法运行,只有实际用C语言编译环境中运行一下才知道程序中存在
5、的问题。但通过不断努力和尝试,还是完成了任务。这次试验锻炼了我们的思维能力和意志力,面对自己不会的东西,如果一味的放着不做,不敢正视自己的问题,那永远都不会得到解决,只有不断尝试,才有可能成功。虽然这次作业是通过借鉴网上的才能完成,但毕竟我们刚开始学编程没多久,铁杵磨成针,相信我们会越来越进步的!10. 源程序清单#include #include #include #include #define LEN sizeof(struct teacher)/宏定义结构体字节数int n=0;struct teacher/定义结构体long num;/教师号char name20;/姓名char s
6、ex5;/性别int age;/年龄char edu20;/学历char title20;/职称long wage;/工资char addr100;/地址 char telep15;/电话struct teacher *next;/指向下一个结点*head=NULL;void key()/口令检查的函数int i;long a;for(i=0;inext) if(fwrite(p,sizeof(struct teacher),1,fp)!=1) printf(n此处数据有误n);fclose(fp);exit(0);void read()/从文件读出数据的函数struct teacher te
7、ach299,temp;int i=0;FILE *fp;char filename20;printf(n请输入存有教师信息的文件名:);scanf(%s,filename); if(fp=fopen(filename,rb)=NULL)printf(n无法打开文件n);exit(0);fseek(fp,-sizeof(struct teacher),2);/*将位置指针从文件末尾后退一个结构体的字节数*/fread(&temp,sizeof(struct teacher),1,fp);/*从所指向的文件中读出数据存储到结构体变量temp中*/fseek(fp,0,0);/将位置指针移到文件的
8、开头if(fread(&teachi,sizeof(struct teacher),1,fp)=1)/*判断文件开头读入的数据是否为空*/printf(n存有的教师信息如下:n);while(teachi.num!=temp.num)/进行循环读取文件printf(教师号:%ld,姓名:%s,性别:%s,年龄:%d,学历:%s,teachi.num,,teachi.sex,teachi.age,); printf(职称:%sn 月薪:%ld,住址:%s,电话:%sn,teachi.title,teachi.wage,teachi.addr,teachi
9、.telep); i=i+1; fread(&teachi,sizeof(struct teacher),1,fp);/*从文件中读入数据存储到结构体变量teach【i】中*/输出文件中的最后一个信息 printf(教师号:%ld,姓名:%s,性别:%s,年龄:%d,学历:%s,teachi.num,,teachi.sex,teachi.age,); printf(职称:%sn 月薪:%ld,住址:%s,电话:%sn,teachi.title,teachi.wage,teachi.addr,teachi.telep); fclose(fp);else
10、printf(该文件中无教师信息n);/文件为空时输出此处void creat()/录入教师信息的函数struct teacher *p1,*p2,*p3;p1=p2=(struct teacher *)malloc(LEN);/*申请一个结构体字节数的空间用来存储一个教师的信息*/printf(请输入一位教师的教师号(结束录入请输入0):);scanf(%ld,&p1-num);if(p1-num!=0)/判断用户是要结束录入还是要存储信息if(head=NULL) head=p1;/*判断链表是否为空,是则将链表头指向p1*/else /链表不为空则将链表尾指向p1p3=head;/p3用
11、来记录链表的尾部while(p3-next!=NULL)/*若p3不是链表尾则将p3指向 下一个结点*/p3=p3-next;p3-next=p1;/将最后一个结点指向p1while(p1-num!=0)/判断用户是否结束录入功能/录入该教师号的教师对应的信息printf(姓名: );scanf(%s,p1-name);printf(性别:);scanf(%s,p1-sex);printf(年龄:);scanf(%d,&p1-age);printf(学历:);scanf(%s,p1-edu);printf(职称:);scanf(%s,p1-title);printf(月薪:);scanf(%l
12、d,&p1-wage);printf(住址:);scanf(%s,p1-addr);printf(电话:);scanf(%s,p1-telep);n=n+1;/给统计录入的教师数n加一/*判断是否为第一个录入的信息,是则将链表头指向p1,否则将p2指向p1*/ if(n=1) head=p1; else p2-next=p1;p2=p1;/p2用来记录链表的最后一个结点p1=(struct teacher *)malloc(LEN);/重新申请空间printf(请输入一位教师的教师号(结束录入请输入0): );scanf(%ld,&p1-num);p2-next=NULL;/将最后一个结点指向
13、空void print()/输出教师信息的函数struct teacher *p;int i;p=head;if(head!=NULL)/判断链表是否为空 printf(n这%d位教师的信息为:n,n);doprintf(教师号:%ld,姓名:%s,性别:%s,年龄:%d,学历:%s,职称:%sn,p-num,p-name,p-sex,p-age,p-edu,p-title);printf( 月薪:%ld,住址:%s,电话:%sn,p-wage,p-addr,p-telep);p=p-next;/将下一个结点的首地址赋给pwhile(p!=NULL);/到链表尾时结束循环else/链表为空时执
14、行以下部分printf(n你此次登录系统还没有录入教师信息,可进行以下操作:n);printf( 1:【浏览以前保存在文件中的教师信息】 2:【开始录入教师信息】n);printf( 3:【退出系统】 4:【返回菜单】n);printf(请选择:);scanf(%d,&i);while(i4)printf(选择无效,请重新输入正确选项:);scanf(%d,&i);if(i=1) read();/调用从文件读取数据的函数 if(i=2) creat();/调用录入信息的函数if(i=3) exit(0);/退出系统void del()/删除教师信息的函数struct teacher *p1,*
15、p2;long i;if(head=NULL)/判断链表是否为空printf(n还未录入过教师信息n);/链表为空时输出return;printf(请输入要删除教师信息的教师号:);scanf(%ld,&i);p1=head;while(i!=p1-num)/直到p1指向的结点是要删除的信息位置if(p1-next=NULL) break;/p1的下个结点为空则退出循环p2=p1;/p2用来记录p1的前一个结点p1=p1-next;/p1指向下一个结点if(i=p1-num)/判断p1是否为要删除的信息if(p1=head) head=p1-next;/*若p1为头结点则将头指针指向p1的下一
16、个结点*/else p2-next=p1-next;/*p1非头结点则将p1后面的结点连接到p1前一个结点的后面*/printf(n已删除教师号为%ld的教师信息n,i);n=n-1;/记录教师数的n要减一/p1不是要删除的信息则表示要删除的信息不再链表中else printf(n已录入的教师信息中没有教师号为%ld的n,i);return;void sort1()/按教师号进行排序的函数struct teacher *p1,*p2,*p3,*p4;int i,j;if(head=NULL)printf(n还未录入过教师信息n);return;if(head-next!=NULL) /判断是否
17、只有一个信息/用冒泡法排序p1=head;/p1记录用来比较的两个结点中的前面一个 p2=head-next;/p2记录比较的两个结点中的后面个 for(i=1;in;i+)/实现n-1趟比较的外循环 for(j=0;jnump2-num)/*比较相邻两个结点中教师号大小*/当p1的教师号大时则对调两个结点的位置if(p1=head) head=p2;else p3-next=p2;/*p1为头结点时则将头指针指向p2,否则就将p2连接到用来记录p1前一个结点的p3的后面*/p4=p2-next;/p4用来记录p2后面的结点p2-next=p1;/p1的结点换到原来p2的位置p1-next=p
18、4;/原来p2后面的结点连接到p1p3=p2;/p3记录下p2的位置p2=p4;/p2指向原来位置的下一个结点else/*p1中教师号没有打过p2中教师号,则将p1,p2都指向它们各自位置的下一个结点*/p3=p1;/记录p1后移一位后它前个结点的位置p1=p2;p2=p2-next;p1=head;/p1指向链表头,开始下一趟外循环的准备p2=p1-next;/p2指向链表第二个结点printf(n按教师号排序后的教师信息如下:n);print();/调用教师信息浏览函数void sort2()/按月薪排序的函数,算法跟按教师号排序的一样struct teacher *p1,*p2,*p3,
19、*p4;int i,j;if(head=NULL)printf(n还未录入过教师信息n);return;if(head-next!=NULL) p1=head; p2=head-next; for(i=1;in;i+) for(j=0;jwagep2-wage)if(p1=head) head=p2;else p3-next=p2;p4=p2-next;p2-next=p1;p1-next=p4;p3=p2;p2=p4;elsep3=p1;p1=p2;p2=p2-next;p1=head;p2=p1-next;printf(n按月薪排序后的教师信息如下:n);print();void sort
20、3()/按年龄排序的函数,算法跟按教师号排序的一样struct teacher *p1,*p2,*p3,*p4;int i,j; if(head=NULL)printf(n还未录入过教师信息n);return;if(head-next!=NULL) p1=head; p2=head-next; for(i=1;in;i+) for(j=0;jagep2-age)if(p1=head) head=p2;else p3-next=p2;p4=p2-next;p2-next=p1;p1-next=p4;p3=p2;p2=p4;elsep3=p1;p1=p2;p2=p2-next;p1=head;p2
21、=p1-next;printf(n按年龄排序后的教师信息如下:n);print();void choose1()/选择排序方式的函数int i;printf( 排序方式n);printf( 1:【按教师号排序】 2:【按年龄排序】n);printf( 3:【按月薪排序】n);printf(请选择:);scanf(%d,&i); while(i3)printf(选择无效,请重新输入正确选项:);scanf(%d,&i);switch(i) case 1:sort1();break; case 2:sort3();break; case 3:sort2();break;void search1()
22、/按教师号查找的函数struct teacher *p;long i;/存储用户输入的想要删除的教师号if(head=NULL)printf(n还未录入过教师信息n);return;printf(请输入要查找的教师信息的教师号:); scanf(%ld,&i);for(p=head;p!=NULL;p=p-next) /p顺序指向结点与i比较,找出有i的数据的结点并输出if(p-num=i) printf(教师号:%ld,姓名:%s,性别:%s,年龄:%d,学历:%s,职称:%sn,p-num,p-name,p-sex,p-age,p-edu,p-title);printf( 月薪:%ld,住
23、址:%s,电话:%sn,p-wage,p-addr,p-telep);return;printf(已录入的教师信息中不存在该教师号n);void search2()/按姓名查找的函数struct teacher *p;char i20;/记录用户输入的想要删除的姓名int j=0;/j用来记录找到了多少个信息if(head=NULL)printf(n还未录入过教师信息n);return;printf(请输入要查找的信息的教师姓名:); scanf(%s,i);for(p=head;p!=NULL;p=p-next)if(strcmp(p-name,i)=0)/比较p指向的结点中的姓名跟i的是否
24、一致,是则输出 printf(教师号:%ld,姓名:%s,性别:%s,年龄:%d,学历:%s,职称:%sn,p-num,p-name,p-sex,p-age,p-edu,p-title);printf( 月薪:%ld,住址:%s,电话:%sn,p-wage,p-addr,p-telep);j=j+1;/每输出一个教师的信息则j加一if(j=0) printf(已录入的教师信息中不存在该姓名的教师n);void search3()/按职称查找的函数,算法与按姓名查找的一样struct teacher *p;char i20;int j=0;if(head=NULL)printf(n还未录入过教师
25、信息n);return;printf(请输入要查找的信息的教师职称:); scanf(%s,i);for(p=head;p!=NULL;p=p-next)if(strcmp(p-title,i)=0) printf(教师号:%ld,姓名:%s,性别:%s,年龄:%d,学历:%s,职称:%sn,p-num,p-name,p-sex,p-age,p-edu,p-title);printf( 月薪:%ld,住址:%s,电话:%sn,p-wage,p-addr,p-telep); j=j+1;if(j=0) printf(已录入的教师信息中不存在该职称的教师n);void search4()/按年龄查找的函数,算法与按教师号查找的一样struct teacher *p;int i,j=0;if(head=NULL)printf(n还未录入过教师信息n);return;printf(请输入要查找的信息的教师年龄:); scanf(%d,&i);for(p=head;p!=NULL;p=p-n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年地下管道整体维修与监测技术
- 2026春招:新材料题库及答案
- 2026年基于健康监测数据的桥梁抗震评估
- 护理专业发展政策与挑战
- 医疗安全管理与风险防范
- 基于大数据的疾病预测模型构建
- 2026年北京科技大学天津学院高职单招职业适应性测试参考题库带答案解析
- 2026年黑龙江三江美术职业学院高职单招职业适应性测试备考题库有答案解析
- 医疗保险产品创新与设计
- 医院护理质量管理与职业素养
- 市政道路工程危大工程安全管理措施
- 教学计划(教案)-2024-2025学年人教版(2024)美术一年级上册
- 粮食采购合同范文
- 新人教版日语七年级全一册单词默写清单+答案
- SL721-2015水利水电工程施工安全管理导则
- Sweet 综合征学习课件
- 新教科版五年级上册科学全册实验报告单(超全版)
- GB/T 32891.2-2019旋转电机效率分级(IE代码)第2部分:变速交流电动机
- GB/T 18570.4-2001涂覆涂料前钢材表面处理表面清洁度的评定试验涂覆涂料前凝露可能性的评定导则
- 保理业务授信管理办法(2022年)
- 模拟电子技术期末考试试卷及答案
评论
0/150
提交评论