1、 学生成绩管理系统 一、 实验目的 1. 通过此次课程设计中学生成绩管理系统的题目,掌握链表等数据结构的基本操作方面的知识,并能灵活的解决一些基本的问题,加深对其性质及各项操作的理解; 2. 将所学数据结构方面的知识与一门具体的语言——C语言来进行实现,感受数据结构的强大作用,加深理解。 二、 试验要求 管理系统中有五个要求:输入 查找 修改 插入 删除 存储 (1) 输入要求:能够通过键盘输入和文件输入两种 (2) 查找要求:能够根据学生号查找单个学生的信息,也可以遍历所有学生信息 (3) 修改要求:能够根据学生号修改单个学生所有信息 (4) 插
2、入要求:能够实现头插和尾插 (5) 删除要求:能够根据学生号删除单个学生信息 (6) 存储要求:通过链表存储所有信息 三、 算法的思想与算法实现步骤 1. 基本思想 通过链表数据类型进行基本操作,主要有三个模块:分别是主函数模块、 主要操作函数及基本操作函数。 其中,主函数负责其他子函数的调用实现以及基本界面的操作 主要函数包括: void StuInput(Student *); //学生成绩管理系统的输入函数,由主函数调用 void StuSelect(Student *); //学生成绩管理系统的查找函数,由主函数调用 void StuAlter(Stude
3、nt *); //学生成绩管理系统的修改函数,由主函数调用 void StuInsert(Student *); //学生成绩管理系统的插入函数,由主函数调用 void StuDelect(Student *); //学生成绩管理系统的删除函数,由主函数调用 void StuSave(Student *); //学生成绩管理系统的存储函数,由主函数调用 基本操作函数: void StuOutput(Student *p); //输出函数 int StuImport(Student *head,Student *p); //输入函数 void S
4、tuInputHand(Student *head); //学生成绩管理系统的手动输入函数,由输入函数调用 void StuInputFile(Student *head); //学生成绩管理系统的文件输入函数,由输入函数调用 void StuSelectErg(Student *head); //学生成绩管理系统的遍历函数,由查找函数调用 void StuSelectNumFind(Student *head); //学生成绩管理系统的按学号查找函数,由查找函数调用 void StuSelectSubFind(Student *head); //学生成绩管
5、理系统的按科目查找函数,由查找函数调用 2. 实现步骤 首先,分析题目要求划分实现模块,定义基本数据类型,诸如结构体、链表等; 其次,针对上述的基本操作实现具体需要进行的操作,具体实现每个环节需要进行的基本操作,即具体编写每个小函数实现功能; 最后,编写主函数对每个实现进行按需调用,实现操作。 3.流程图 main StuMain StuInput StuSelect StuAlter StuInsert StuDelect StuSave StuInputHand StuInputFile StuSelectErg StuSelectNumFind S
6、tuSelectSubFind
四.代码:
#include
7、d StuSelect(Student *); //学生成绩管理系统的查找函数,由主函数调用 void StuAlter(Student *); //学生成绩管理系统的修改函数,由主函数调用 void StuInsert(Student *); //学生成绩管理系统的插入函数,由主函数调用 void StuDelect(Student *); //学生成绩管理系统的删除函数,由主函数调用 void StuSave(Student *); //学生成绩管理系统的存储函数,由主函数调用 void StuOutput(Student *p); //输
8、出函数 int StuImport(Student *head,Student *p); //输入函数 void StuOutput(Student *p) //打印函数,将链表的该节点信息输出 { printf("学生姓名:"); printf("%s ",p->name); printf("学生号:"); printf("%d ",p->num); printf("科目: "); printf("%s ",p->subject); printf("学生成绩:"); prin
9、tf("%d \n",p->grade); } int StuImport(Student *head,Student *p) { Student *Opinion=(Student *)malloc(sizeof(Student)); //用来判断输入节点中学生号是否有重复 Opinion=head->next; printf("学生姓名:\n"); scanf("%s",p->name); printf("学生号:\n"); scanf("%d",&p->num); printf("科目:\n");
10、 scanf("%s",p->subject); if(Opinion!=NULL) { if(Opinion->num==p->num&&!strcmp(Opinion->subject,p->subject)) { printf("该学生这门科目已有成绩,请重新输入\n"); return 1; } Opinion=Opinion->next; } printf("学生成绩:\n"); scanf("%d",&p->grade); return 0; } void main() {
11、 StuMain(); } void StuMain() { char decide='y'; //定义while变量,函数是否继续进行 int num=1; //定义switch变量,函数跳转到哪个子函数 Student *head; //定义链表的头指针 head=(Student *)malloc(sizeof(Student)); //给头指针开辟空间 head->next=N
12、ULL; //初始化头指针 while(decide!='n') { printf(" ***************************************************\n"); printf(" ********** 1 输入 2 查找 3 修改 4 插入 ********\n"); printf(" ********** 5 删除 6 存储 7 退出 ********\n"); print
13、f(" ***************************************************\n"); scanf("%d",&num); switch(num) { case 1: StuInput(head); break; case 2: StuSelect(head); break; case 3: StuAlter(head); break; case 4: StuInsert(head); break;
14、 case 5: StuDelect(head); break; case 6: StuSave(head); break; default: decide='n'; break; } }; } void StuInputHand(Student *head); //学生成绩管理系统的手动输入函数,由输入函数调用 void StuInputFile(Student *head); //学生成绩管理系统的文件输入函数,由输入函数调用 void S
15、tuInput(Student *head) //学生成绩管理系统的输入函数,由主函数调用 { char decide='y'; //定义while变量,函数是否继续进行 int num; //定义switch变量,函数跳转到哪个子函数 while(decide!='n') { printf(" ***************************************************\n"); printf(" *
16、 1 手动输入 2 文件输入 3 退出 **\n"); printf(" ***************************************************\n"); scanf("%d",&num); switch(num) { case 1: StuInputHand(head); break; case 2: StuInputFile(head); default: decide='n'; break; } } } void StuInputHand(
17、Student *head) //学生成绩管理系统的手动输入函数,由输入函数调用 { if(head->next==NULL) { Student *point=(Student *)malloc(sizeof(Student)); //链表中最后一个节点,只在该函数中存在 point->next=NULL; int decide=1; while(decide!=0) { Student *p=(Student *)malloc(sizeof(Student)
18、); p->next=NULL; StuImport(head,p); if(head->next==NULL) { head->next=p; point=p; } else { point->next=p; point=p; } printf("是否继续:1/0\n"); scanf("%d",&decide); } } el
19、se printf("管理系统中已存在信息,若想输入学生信息,请转插入子系统"); } void StuInputFile(Student *head) //学生成绩管理系统的文件输入函数,由输入函数调用 { if(head->next!=NULL) { printf("学生管理系统中已有信息,请跳转到插入选项\n"); return ; } FILE *fp; printf("请输入文件名(包括物理地址)\n"); char fil
20、ename[10]; scanf("%s",filename); if((fp=fopen(filename,"r"))==NULL) { printf("can not open file\n"); return; } Student *point=(Student *)malloc(sizeof(Student)); Student *Opinion=(Student *)malloc(sizeof(Student)); //用
21、来判断输入节点中学生号是否有重复 while(!feof(fp)) { Opinion=head->next; Student *p=(Student *)malloc(sizeof(Student)); p->next=NULL; fread(p,sizeof(Student),1,fp); if(Opinion!=NULL) { if(Opinion->num==p->num&&!strcmp(Opinion->subject,p->sub
22、ject)) { printf("该文件中有重复学生信息,请验明再传输\n"); head->next=NULL; return ; } Opinion=Opinion->next; } if(head->next==NULL) { head->next=p; point=p; } else { point->next=p; point=p;
23、} }; Opinion=head->next; while(Opinion->next!=NULL) { Opinion=Opinion->next; if(Opinion->next->next==NULL) Opinion->next=NULL; }; fclose(fp); printf("传输成功\n"); } void StuSelectErg(Student *head); //学生成绩管理系统的遍历函数,由查找函数调用 void S
24、tuSelectNumFind(Student *head); //学生成绩管理系统的按学号查找函数,由查找函数调用 void StuSelectSubFind(Student *head); //学生成绩管理系统的按科目查找函数,由查找函数调用 void StuSelect(Student *head) //学生成绩管理系统的查找函数,由主函数调用 { char decide='y'; //定义while变量,函数是否继续进行 int num;
25、 //定义switch变量,函数跳转到哪个子函数 while(decide!='n') { printf(" ***************************************************\n"); printf(" **** 1 遍历 2 学号查找 3 科目查找 4 退出 ****\n"); printf(" ***************************************************\n"); scanf("%d",&num); switch(num) { case 1
26、 StuSelectErg(head); break; case 2: StuSelectNumFind(head); break; case 3: StuSelectSubFind(head); break; default: decide='n'; break; } } } void StuSelectErg(Student *head) //学生成绩管理系统的遍历函数,由查找函数调用 { Student *p=(Student *)malloc(sizeof(Student)
27、); p=head->next; int i=1; while(p!=NULL) { printf("第%d位学生信息:\n",i); StuOutput(p); p=p->next; i++; } } void StuSelectNumFind(Student *head) //学生成绩管理系统的查找子系统,有查找函数调用 { int num; printf("输入想要查找学生的学生号:\n"); scanf("%d",&num);
28、 Student *p=(Student *)malloc(sizeof(Student)); p=head->next; int i=1; while(p!=NULL) { if(num==p->num) { StuOutput(p); i++; } p=p->next; } if(i==1) printf("没有该学生信息"); } void StuSelectSubFind(Student *head) //学生成绩管理系统的按科目查找
29、函数,由查找函数调用 { char Sub[10]; printf("输入想要查找科目:\n"); scanf("%s",Sub); Student *p=(Student *)malloc(sizeof(Student)); p=head->next; int i=1; while(p!=NULL) { if(!strcmp(Sub,p->subject)) { StuOutput(p); i++; } p=p->n
30、ext; } if(i==1) printf("没有该学生信息"); } void StuAlter(Student *head) //学生成绩管理系统的修改函数,由主函数调用 { int num; printf("输入想要查找学生的学生号:\n"); scanf("%d",&num); char Sub[10]; printf("输入想要查找科目:\n"); scanf("%s",Sub); Student *p=(Student *)malloc(sizeof
31、Student)); p=head->next; int i=1; while(p!=NULL) { if(num==p->num&&!strcmp(Sub,p->subject)) { printf("输入修改成绩:\n"); scanf("%d",&p->grade); printf("修改成功\n"); i++; } p=p->next; if(i==1) printf("没有该学生信息"); } } void
32、 StuInsert(Student *head) //学生成绩管理系统的插入函数,由主函数调用 { Student *point=(Student *)malloc(sizeof(Student)); point=head->next; while(point->next!=NULL) point=point->next; //找到尾结点 char decide='y'; //定义while变量,函数是否继续进行 int num
33、 //定义switch变量,函数跳转到哪个子函数 while(decide!='n') { printf(" ***************************************************\n"); printf(" **** 1 头插 2 尾插 3 退出 ****\n"); printf(" ********************************************
34、\n"); scanf("%d",&num); Student *p=(Student *)malloc(sizeof(Student)); switch(num) { case 1: StuImport(head,p); p->next=head->next; head->next=p; printf("插入成功\n"); break; case 2: StuImpo
35、rt(head,p); point->next=p; p->next=NULL; printf("插入成功\n"); break; default: decide='n'; break; } } } void StuDelect(Student *head) //学生成绩管理系统的删除函数,由主函数调用 { int num; printf("输入想要删除学生的学生号:\n");
36、 scanf("%d",&num); char Sub[10]; printf("输入想要删除科目:\n"); scanf("%s",Sub); Student *p=(Student *)malloc(sizeof(Student)); p->next=head->next; int i=1; while(p->next!=NULL) { if(num==p->next->num&&!strcmp(Sub,p->next->subject)) { StuOutpu
37、t(p->next); printf("是否删除:1/0\n"); scanf("%d",&i); if(num==head->next->num&&!strcmp(Sub,head->next->subject)) { head->next=head->next->next; } else { p->next=p->next->next; } i=2; printf("删除成功\n"); bre
38、ak; } p=p->next; } if(i==1) printf("没有该学生信息\n"); } void StuSave(Student *head) //学生成绩管理系统的存储函数,由主函数调用 { FILE *fp; char filename[10]; printf("请输入存储文件名(包括物理地址)\n"); scanf("%s",filename); Student *p=(Student *)malloc(sizeof(Student)); p=he
39、ad->next; if((fp=fopen(filename,"w"))==NULL) { printf("cannot open file"); return; } printf("input data:/n"); while(p!=NULL) { fwrite(p,sizeof(Student),1,fp); /* 成块写入文件*/ p=p->next; } fclose(fp); }其中专业理论知识内容包括:保安理论知识、消
40、防业务知识、职业道德、法律常识、保安礼仪、救护知识。作技能训练内容包括:岗位操作指引、勤务技能、消防技能、军事技能。 二.培训的及要求培训目的 安全生产目标责任书 为了进一步落实安全生产责任制,做到“责、权、利”相结合,根据我公司2015年度安全生产目标的内容,现与财务部签订如下安全生产目标: 一、目标值: 1、全年人身死亡事故为零,重伤事故为零,轻伤人数为零。 2、现金安全保管,不发生盗窃事故。 3、每月足额提取安全生产费用,保障安全生产投入资金的到位。 4、安全培训合格率为100%。 二、本单位安全工作上必须做到以下内容: 1、对本单位的安全生产负直接领导责任,必须模
41、范遵守公司的各项安全管理制度,不发布与公司安全管理制度相抵触的指令,严格履行本人的安全职责,确保安全责任制在本单位全面落实,并全力支持安全工作。 2、保证公司各项安全管理制度和管理办法在本单位内全面实施,并自觉接受公司安全部门的监督和管理。 3、在确保安全的前提下组织生产,始终把安全工作放在首位,当“安全与交货期、质量”发生矛盾时,坚持安全第一的原则。 4、参加生产碰头会时,首先汇报本单位的安全生产情况和安全问题落实情况;在安排本单位生产任务时,必须安排安全工作内容,并写入记录。 5、在公司及政府的安全检查中杜绝各类违章现象。 6、组织本部门积极参加安全检查,做到有检查、有
42、整改,记录全。 7、以身作则,不违章指挥、不违章操作。对发现的各类违章现象负有查禁的责任,同时要予以查处。 8、虚心接受员工提出的问题,杜绝不接受或盲目指挥; 9、发生事故,应立即报告主管领导,按照“四不放过”的原则召开事故分析会,提出整改措施和对责任者的处理意见,并填写事故登记表,严禁隐瞒不报或降低对责任者的处罚标准。 10、必须按规定对单位员工进行培训和新员工上岗教育; 11、严格执行公司安全生产十六项禁令,保证本单位所有人员不违章作业。 三、 安全奖惩: 1、对于全年实现安全目标的按照公司生产现场管理规定和工作说明书进行考核奖励;对于未实现安全目标的按照公司规定进行处罚。 2、每月接受主管领导指派人员对安全生产责任状的落






