综合应用案例—学生信息管理系统(C语言)
c语言课程设计学生考勤系统设计

c语言课程设计学生考勤系统设计一、课程目标知识目标:1. 学生能够掌握C语言基础语法,包括数据类型、变量定义、运算符、控制结构等。
2. 学生能够理解结构体和数组在C语言中的应用,并能运用其设计学生考勤系统。
3. 学生能够掌握文件操作在C语言中的使用,实现对考勤数据的存储和读取。
技能目标:1. 学生能够运用C语言编写程序,实现学生考勤系统的基本功能,如学生信息的添加、删除、修改和查询。
2. 学生能够利用所学知识对程序进行调试和优化,提高代码执行效率。
3. 学生能够通过课程学习,培养解决问题、分析问题和编程实现的能力。
情感态度价值观目标:1. 学生在学习过程中,培养对编程的兴趣和热情,提高主动学习的积极性。
2. 学生能够通过课程实践,认识到编程对解决实际问题的价值,增强自信心和成就感。
3. 学生在团队协作中,学会沟通与交流,培养合作精神和集体荣誉感。
课程性质:本课程为实践性较强的课程,旨在通过设计学生考勤系统,让学生将所学C语言知识应用于实际项目中。
学生特点:学生具备一定的C语言基础,对编程有一定了解,但实际操作能力有待提高。
教学要求:注重理论与实践相结合,通过课程设计,提高学生的编程能力和解决实际问题的能力。
将目标分解为具体的学习成果,便于后续教学设计和评估。
二、教学内容1. C语言基础语法复习:包括数据类型、变量定义、运算符、控制结构(如if 语句、循环语句等)。
相关教材章节:第一章至第三章。
2. 结构体和数组的应用:介绍结构体定义、数组的使用,结合实例讲解如何存储和管理学生信息。
相关教材章节:第四章、第七章。
3. 文件操作:讲解文件打开、读写、关闭等操作,以及如何将学生考勤数据存储到文件中。
相关教材章节:第十章。
4. 函数和模块化编程:引导学生学会将程序功能模块化,提高代码的可读性和可维护性。
相关教材章节:第六章。
5. 调试与优化:介绍常见编程错误类型,教授调试技巧,提高代码执行效率。
相关教材章节:第十二章。
C语言综合应用实例

printf("Openfile%serror!Strikeanykeytoexit!",p);
system("pause");
exit(0);
}
while(fscanf(fp,"%s%s%d%s%s%s%s%s",stu[i].code,stu[i].name,&stu[i].age,
stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail)==8)
C语言综合应用实例
一、学生信息管理系统
#include<stdio.h>/*I/O函数*/
#include<stdlib.h>/*其它说明*/
#include<string.h>/*字符串函数*/
#defineBUFLEN100/*缓冲区最大字符数*/
#defineLEN15/*学号和姓名最大字符数,实际请更改*/
strcpy(stu[j].mail,temp);
p=&stu[j-1].age;
q=&stu[j].age;
s=*q;
*q=*p;
*p=s;
}
}
}
voidinsert()/*插入函数*/
{
inti=n,j,flag;
printf("请输入待增加的学生数:\n");
scanf("%d",&m);
do
case5:
printf("请输入新的地址:\n");
scanf("%s",s2);
strcpy(stu[num].add,s2);break;
项目教学在C语言教学中应用

项目教学在C语言教学中的应用摘要:本文论述了在c语言教学实践中,针对c语言教与学现状,改革传统教学模式和教学内容,采用“案例式”课堂教学方法,以“项目驱动式”实践教学为核心,激发了学生的学习积极性。
关键词:案例项目驱动 c语言教学程序设计中图分类号:g64 文献标识码:a 文章编号:1673-9795(2013)05(a)-0048-01作为程序设计的入门语言课,它对培养学生良好的程序设计素养和对计算机科学的浓厚兴趣,以及对学生后续专业知识的掌握都起着重要的基础作用。
通过对该课程的学习,学生能够掌握程序设计的基本思想和方法,锻炼自己的逻辑思维能力,具有用计算机解决实际问题的能力。
但非计算机专业的学生对c语言的学习的积极性不高、编程思维欠缺、上机练习比较盲目。
本文结合教学实践就程序设计类课程的具体改革措施进行了一些探索。
1 现状笔者在教学过程中发现,虽然再三强调c语言课程的重要性,而对于多数非计算机专业的学生来说(尤其是与计算机专业关联不大的专业),认为这门课程与所学的专业毫不相关,学不学无所谓,甚至会认为学校没有开设该门课程的必要,失去了学习的兴趣。
而对于一些愿意学习的学生来说,存在听教师讲解时都能听懂,但可上机时却脑子一片空白,不知从何下手,无法动手编程,出现“听得懂,编不出”现象。
原因是仅仅掌握了一些语法要素,并不理解算法设计、数据结构等其他相关知识的具体应用。
c语言程序设计课程是c语言与程序设计相结合的一门课程,要求教师在授课过程中,既要讲解c语言的一些语法规则,又要重视程序设计思想。
而教师授课往往会把重点放在学生不感兴趣的语法规则的解释上,以课程为主,重理论、轻实践,只把上机作为验证理论的手段。
这些都是c语言课程教学质量不高的症结所在。
按照传统的教学方式上课,难以取得良好的教学效果。
因此,在c语言的教学中,增加实训内容,将项目融入c语言教学中。
2 项目教学法采用项目拓展驱动法教学,方法是整个课程教学围绕一个“工程项目”进行,通过逐步拓展的实训项目和设计,将每一个阶段的学习进行小结性的贯穿和能力提高,将c语言的知识点都溶化到一个个实训项目的程序编写中,让学生对每个阶段、每一次课的目标做到心中有数。
C语言程序设计说课稿

C语⾔程序设计说课稿《C语⾔程序设计》说课稿信息⼯程系张林《C语⾔程序设计》说课稿(⼀)课程设置1、课程定位(性质和作⽤)《C语⾔程序设计》课程是计算机应⽤技术专业的专业基础课,旨在培养学⽣运⽤计算机进⾏逻辑思维的能⼒,掌握运⽤C语⾔编程来解决岗位⼯作中实际问题的⽅法和步骤,为提⾼职业能⼒和拓展职业空间打下坚实基础。
学⽣毕业后⼯作岗位主要有计算机管理员、单⽚机应⽤设计员、⽹络应⽤等,在计算机控制、单⽚机应⽤、电⼦技术、通信技术等相关⾏业中都将使⽤C 语⾔作为应⽤系统开发设计语⾔,C语⾔也是其它编程语⾔类课程的前导课程,也是信息产业部计算机专业和软件专业⽔平资格考试(程序员、⽹络管理员等)考试中要求的主要程序设计语⾔。
2、课程设计(理念与思路)设计原则:坚持以岗位能⼒培养为本位的设计原则,教学内容、教学⽅法及考核⽅式均围绕能⼒培养来进⾏设计。
设计理念:以后续课程对编程能⼒需求为导向,坚持理论够⽤,将相关知识点分解到实际项⽬中,让学⽣通过对项⽬的分析和实现来掌握相关理论知识和编程技能,选择技术实⽤性、知识拓展性强的教学⽤例和实训项⽬,同时将计算机等级考试和专升本相关内容融⼊到相关的教学单元中。
(⼆)教学内容(课程⼤纲)⼀、课程基本情况课程类型:理论课+实践课计划学时:理论课40课时实践课56课时开课学期:第⼀学年后续课程:《基于C语⾔的数据结构算法设计》、《VC++》、《VB》、《软件⼯程》、《Java程序设计》课程性质:专业必修课⼆、课程⽬标1、素质⽬标(1)、具有独⽴思考、独⽴设计、独⽴调试的基本能⼒(2)、具有良好的分析问题、解决问题和再学习的能⼒(3)、具有良好的完成⼯作任务、团队合作和沟通能⼒(4)、培养严谨的⼯作作风和勤奋努⼒的⼯作态度(5)、培养较强的掌握新技术、新⽅法和新系统的能⼒(6)、具有健全的⼈格和⾏为习惯、具有⼼理承受能⼒和社会责任感2、能⼒⽬标(1)、能够根据数据处理的需求,熟练使⽤数值、字符、数组、指针和⽂件等各种数据类型编写程序(2)、能够根据数据处理的需求,熟练运⽤顺序、选择、循环等结构化语⾔进⾏程序设计树的逻辑结构,描述其物理结构并实现相应算法(3)、能够灵活、有效地运⽤典型的排序、查找等算法(4)、能够采⽤模块化的⽅法进⾏程序设计(5)、能够读懂软件开发项⽬的部分编程逻辑与技巧、基本的业务流程控制与核⼼算法3、知识⽬标(1)数据类型与表达式(2)顺序结构程序设计(3)选择结构程序设计(4)循环结构程序设计(5)数组、指针、结构体和⽂件等数据类型的定义与应⽤(6)应⽤函数程序设计。
超市收银c语言课程设计

超市收银c语言课程设计一、课程目标知识目标:1. 学生能理解C语言在超市收银系统中的应用,掌握基本的数据类型、变量、运算符和语法结构。
2. 学生能掌握结构体和数组的使用,实现对商品信息和收银数据的存储与管理。
3. 学生能运用函数和模块化编程思想,实现超市收银系统的各个功能模块。
技能目标:1. 学生能运用C语言编写简单的超市收银系统程序,具备基本的编程能力。
2. 学生能通过调试和修改程序,解决超市收银系统中的常见问题,提高问题解决能力。
3. 学生能运用所学知识,对超市收银系统进行优化和扩展,提高系统性能。
情感态度价值观目标:1. 学生通过课程学习,认识到编程在现实生活中的应用价值,激发对计算机编程的兴趣和热情。
2. 学生在团队协作中学会沟通、分享和合作,培养良好的团队精神。
3. 学生在课程实践中,体验编程带来的成就感,增强自信心,培养积极向上的学习态度。
本课程针对高年级学生,结合C语言学科特点,注重理论与实践相结合。
在教学过程中,关注学生的个体差异,激发学生的兴趣和潜能,培养学生编程思维和实际操作能力。
课程目标明确,分解为具体学习成果,便于后续教学设计和评估。
通过本课程的学习,使学生能够掌握C语言编程技能,为实际应用打下坚实基础。
二、教学内容1. C语言基础语法:数据类型、变量定义、运算符、表达式、输入输出语句。
- 教材章节:第一章至第三章- 进度安排:2课时2. 控制结构:顺序结构、选择结构、循环结构。
- 教材章节:第四章- 进度安排:3课时3. 函数:函数定义、调用、参数传递、递归。
- 教材章节:第五章- 进度安排:3课时4. 结构体与数组:结构体定义、数组应用、结构体数组。
- 教材章节:第六章、第七章- 进度安排:4课时5. 文件操作:文件打开、读写、关闭。
- 教材章节:第十章- 进度安排:2课时6. 超市收银系统设计:需求分析、模块划分、代码编写、系统测试。
- 教材章节:综合应用- 进度安排:5课时教学内容依据课程目标进行选择和组织,注重科学性和系统性。
C程序设计综合实验报告(2014)信管

b、基本功能用函数实现;
c、至少完成实验内容中4个功能,学生可以自己增加或减少题目功能;
d、程序能正确执行、输入与输出有必要的提示信息、界面美观;
e、用菜单调用加分,用链表加分。
3、最后结果输出。要求:输出格式要界面直观、清晰大方、格式规范。
四、实验结果及分析
1、实验运行过程及分析
一、实验目的
通过该实验把C语言中基本知识(如:顺序结构、选择结构、循环结构、数组、函数、指针、链表等)得到综合应用。完成学生成绩管理系统基本功能设计,提高学生的编程能力和分析问题、解决问题的能力。
二、设备与环境
硬件:多媒体计算机
软件:Windows系列或DOS系列的操作系统、C语言。
三、实验内容
1、实验内容
2、运行结果
3、心得体会
教师评价
评定项目
A
B
C
D
评定项目
A
BCΒιβλιοθήκη D算法正确界面美观,布局合理
程序结构合理
操作熟练
语法、语义正确
解析完整
实验结果正确
文字流畅
报告规范
题解正确
其他:
评价教师签名:
2012年7月2日
对学生基本信息,包括学号、姓名、至少三门课成绩。
1学生基本信息录入;
2学生基本信息的输出;
3按学号查询学生信息;
4按学号修改某学生信息并输出;
5求每个人平均成绩;
6删除某学生信息;
7添加某学生信息
8输出平均分大于80分的同学信息;
9根据总成绩或平均成绩综合排名;(此功能用链表处理的同学可不做)
2、实验要求
华北科技学院计算机学院综合性实验
《C语言程序设计》课程标准

《C语言程序设计》课程标准一、课程基本信息课程名称: C语言程序设计所属系部:计算机系学时: 112授课对象:计算机专业高职学生课程性质:计算机各专业的专业基础课开发人员: 甘杜芬介颂园陈小海钟永全二、课程性质与作用(一)课程性质《C语言程序设计》课程是高职高专计算机类各专业的职业素质必修课,在专业人才培养方案中处于核心地位,对于培养学生结构化程序设计的思想和方法起重要作用。
旨在培养高职学生运用计算机逻辑思维的能力,掌握运用C语言编程来解决工作中实际问题的方法和步骤,为提高职业能力和拓展职业空间打下坚实基础.(二)课程作用使学生掌握C语言程序的基础知识和基本技能,树立结构化程序设计思想,养成良好的编程习惯,培养严谨务实的分析问题与解决问题的能力,并为后续的应用性课程和系统开发课程打好软件基础.三、课程设计的理念与思路(一)课程设计理念《C语言程序设计》是培养学生结构化程序设计思想的课程,是计算机类专业的基础.鉴于面向的是高职高专学生,本着以职业技能培养为主导,以培养能力和提高兴趣为目标,变应试为应用,重视在新形势下的新方法、新规则和新思想的传授,把程序设计领域最新、最有价值的思想和方法渗透到C语言中.着重培养学生无论以后再学习、工作中使用什么语言编程,都能灵活应用这些思想和方法的能力.(二)课程设计思路本课程针对一年级学生初次接触面向过程的程序设计概念的特点,结合C程序设计语言,通过列举大量的应用实例,初步系统地介绍面向过程、面向模块和结构化程序设计的思想和方法,教学过程中注重程序设计思路的灵活多变,力求锻炼学生的逻辑思维能力。
在此基础上,结合上机实践,使学生对程序设计有一个比较全面、系统的了解,为学生今后的学习打下扎实的理论基础。
课程的理论实践一体化教学过程全部安排在机房进行,教学中以学生为中心,教师全程负责传授知识、答疑解惑、指导项目设计、充分调动师生双方的积极性,实现教学目标。
四、课程目标本课程的总体目标:通过任务驱动的学习和综合实训,熟练掌握应用C语言程序设计的基本知识和技能,并树立结构化程序设计的基本思想,养成良好的编程习惯。
c语言校园导游系统课程设计

c语言校园导游系统课程设计一、课程目标知识目标:1. 理解C语言基础语法,掌握结构体、数组、指针等基本概念;2. 学会使用C语言进行基本的输入输出操作;3. 了解文件操作,掌握文件读写方法;4. 掌握C语言中的模块化编程,理解函数的定义与调用。
技能目标:1. 能够运用C语言编写简单的校园导游系统程序;2. 能够设计合理的程序结构,实现模块化编程;3. 能够使用结构体、数组等数据结构存储和处理信息;4. 能够利用文件操作保存和读取导游系统的数据。
情感态度价值观目标:1. 培养学生对编程的兴趣,激发学习C语言的积极性;2. 培养学生团队合作精神,学会在团队中分享和交流;3. 培养学生解决问题的能力,增强面对困难的信心;4. 培养学生的创新意识,鼓励提出独特见解。
课程性质:本课程为实践性较强的学科,旨在让学生通过实际项目开发,掌握C语言编程技能。
学生特点:学生已具备一定的C语言基础,对编程有一定了解,但实际操作能力有待提高。
教学要求:结合学生特点,注重实践操作,以项目为导向,引导学生主动探究,培养编程兴趣和团队协作能力。
将课程目标分解为具体的学习成果,以便在教学设计和评估中逐一落实。
二、教学内容1. C语言基础语法复习:包括变量定义、数据类型、运算符、表达式、控制语句等;相关教材章节:第一章至第四章。
2. 结构体、数组与指针:理解结构体的定义和使用,掌握一维数组和二维数组的应用,了解指针的概念和操作;相关教材章节:第五章、第六章。
3. 函数与模块化编程:掌握函数的定义、调用、参数传递,了解模块化编程的原理;相关教材章节:第七章。
4. 文件操作:学习文件读写方法,掌握文件打开、关闭、读写等基本操作;相关教材章节:第十章。
5. 校园导游系统设计与实现:结合实际项目,运用所学知识设计并编写校园导游系统,包括景点信息展示、路径查询等功能;相关教材章节:综合应用。
教学进度安排:1. 第一周:C语言基础语法复习;2. 第二周:结构体、数组与指针;3. 第三周:函数与模块化编程;4. 第四周:文件操作;5. 第五周至第七周:校园导游系统设计与实现,分阶段完成项目。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
14.3综合应用案例—学生信息管理系统作为学生,同学们最熟悉自己的相关信息了,如果能够设计一个学生信息管理系统,实现全班乃至全校学生信息的管理系统,是非常有实际意义的。
同时,开发一个小型的信息管理系统,综合应用我们之前学习的基本语法知识和程序设计方法,将是一个提升和锻炼实践能力的好机会。
1. 主要功能设计与开发一个学生信息管理系统,对学生的学号、姓名、性别、年龄等基本信息进行管理,实现基本的增、删、改、查等功能。
2. 功能模块设计通过需求分析,按照结构化程序设计自顶向下,逐步细化的方法,以模块化设计为中心的原则,学生信息管理系统应该具有基本的文件管理、编辑、显示三个功能模块。
文件管理模块包括:加载文件、保存文件、拷贝到目标文件、退出系统;编辑模块包括:输入记录、查找记录、修改记录、删除记录、插入记录、记录排序; 显示模块包括:显示全部记录、按序号显示记录。
系统的功能划分如图14.12所示:学生基本信息管理系统输入学生记录浏览学生记录按姓名查找按姓名删除按学号修改插入学生记录保存文件加载文件按序号浏览按姓名排序拷贝文件文件管理模块编辑模块显示模块退出系统图14.12 系统功能模块图3. 数据结构设计为了实现学生信息的管理,系统中采用的主要数据结构是结构体数组,为了方便系统功能扩展及编码方便,使用了#define 定义结构体数组上限,并使用typedef 定义结构体类型别名。
#define M 50 typedef struct{char no[20];char name[20];char sex[5];int age;}STUDENTS;STUDENTS stu[M];4. 函数及调用关系函数是模块化的主要手段,系统的各个主要功能都设计成函数,通过各个函数相互调用,并最终由主函数main调用组装成整个软件系统。
学生信息管理系统由1个.h头文件和2个.c 源文件组成。
程序中除了主函数外,共设计了以下15个函数,以下是这些函数的函数原型及功能设计。
(1)int menu_select();函数功能: 在屏幕上显示主菜单,接收用户选择并响应用户相应操作。
(2)int enter(STUDENTS t[]);函数功能:输入学生记录条数,并循环输入学生基本信息。
(3)void list(STUDENTS t[],int n);函数功能:按每页10条显示结构体数组中的学生信息。
(4)void search(STUDENTS t[],int n);函数功能:按给定的姓名查找学生并显示该生信息。
(5)int del(STUDENTS t[],int n);函数功能:按给定姓名从结构体数组中删除该生信息。
(6)int add(STUDENTS t[],int n);函数功能:给定学生姓名,查找该生在结构体数组中的位置,从该位置开始后移,将一条新输入的学生信息插入在该位置。
(7)void save(STUDENTS t[],int n);函数功能:将结构体数组中的学生信息以二进制方式写入到文件。
(8)int load(STUDENTS t[]);函数功能:将保存的二进制文件加载到内存中的结构体数组。
(9)void display(STUDENTS t[],int n);函数功能:按输入序号从结构体数组中定位并输出学生信息。
(10)void sort(STUDENTS t[],int n);函数功能:采用冒泡排序算法,按姓名将结构体数组中的学生从小到大排序。
(11)void copy();函数功能:将保存的学生信息拷贝到指定的目标文件中一份。
(12)void print(STUDENTS temp);函数功能:显示指定的一条学生记录。
(13)int find_name(STUDENTS t[],int n,char *s);函数功能:在结构体数组中按给定姓名查找学生。
(14)int find_no(STUDENTS t[],int n,char *no);函数功能: 在结构体数组中按给定学号查找学生。
(15)void modify(STUDENTS t[],int n);函数功能:按照给定的学号在结构体数组中定位该生,重新输入数据对其进行修改,并显示修改前后的数据进行对比。
程序中总共16个函数之间的调用关系如图14.13所示:图14.13 函数调用关系5. 算法设计在编写函数过程中,比较难于理解和表达的是冒泡排序算法。
冒泡的定义:在排序过程中,每个数就如同水中的气泡一样,大的上升的速度快,被排在最上面;而小的被依次排在下面;因此,被形象地比喻为“冒泡”。
冒泡法的思路是:相邻两个元素比较,将小的调到前头。
其算法流程如图14.14所示:图14.14 冒泡排序算法流程图6. 程序代码程序代码分别保存到三个文件中:stufun.h中包含头文件、结构体定义以及函数声明等;stufun.c中是系统中除main函数外其他15个自定义函数的实现和相互调用;stuims.c中是主函数main调用其他15个函数组装的整个软件系统。
其中,stufun.c和stuims.c包含了头文件stufun.h。
//stufun.h#include <stdio.h> //I/O函数#include <stdlib.h> //标准库函数#include <string.h> //字符串函数#include <ctype.h> //字符操作函数#define M 50 //定义常数表示记录数typedef struct //定义数据结构{char no[20]; //学号char name[20]; //姓名char sex[5]; //性别int age; //年龄}STUDENTS;//以下是函数原型int menu_select(); //主菜单函数int enter(STUDENTS t[]); //输入记录void list(STUDENTS t[],int n); //显示记录void search(STUDENTS t[],int n); //按姓名查找显示记录int del(STUDENTS t[],int n); //删除记录int add(STUDENTS t[],int n); //插入记录void save(STUDENTS t[],int n); //记录保存为文件int load(STUDENTS t[]); //从文件中读记录void display(STUDENTS t[],int n); //按序号查找显示记录void sort(STUDENTS t[],int n); //按姓名排序void copy(); //文件复制void print(STUDENTS temp); //显示单条记录int find_name(STUDENTS t[],int n,char *s); //按姓名查找函数int find_no(STUDENTS t[],int n,char *no); //按学号查找void modify(STUDENTS t[],int n); //修改记录//stufun.c#include"stufun.h"//菜单函数,函数返回值为整数,代表所选的菜单项int menu_select(){char s[80];int c;printf("*******************主菜单**********************\n");printf(" 0. 输入学生记录\n");printf(" 1. 浏览学生记录\n");printf(" 2. 按姓名查找\n");printf(" 3. 按姓名删除\n");printf(" 4. 按学号修改\n");printf(" 5. 插入学生记录\n");printf(" 6. 保存记录到文件\n");printf(" 7. 加载文件到内存\n");printf(" 8. 按序号浏览\n");printf(" 9. 按姓名排序\n");printf(" 10.拷贝到新文件\n");printf(" 11.程序退出\n");printf("***********************************************\n");do{printf("\n 输入您的菜单选项编号(0-11):"); //提示输入选项scanf("%s",s); //输入选择项c=atoi(s); //将输入的字符串转化为整型数getchar();}while(c<0||c>11); //选择项不在0~11之间重输return c;//返回选择项,主程序根据该数调用相应的函数}//输入记录,形参为结构体数组,函数值返回类型为整型表示记录长度int enter(STUDENTS t[]){int i,n;system("cls");printf("\n请输入学生记录条数:\n");scanf("%d",&n); //输入记录数printf("请输入学生记录:\n");printf("学号姓名性别年龄\n");printf("----------------------------------------------------\n");for (i=0;i<n;i++){scanf("%s",t[i].no); //输入学号scanf("%s",t[i].name); //输入姓名scanf("%s",t[i].sex); //输入性别scanf("%d",&t[i].age); //输入年龄}getchar();return n; //返回记录条数}//显示记录,参数为记录数组和记录条数void list(STUDENTS t[],int n){int i;system("cls");printf("\n********************学生清单************************\n");printf("学号姓名性别年龄\n");printf("----------------------------------------------------\n");for(i=0;i<n;i++){printf("%-20s%-20s%-10s%-10d\n",t[i].no,t[i].name,t[i].sex,t[i].age);if((i+1)%10==0&&n%10>0) //判断输出是否达到10条记录{printf("----------------------------------------------------\n");printf("每页显示10条学生记录,按回车键向后翻页...\n");getchar();system("cls");printf("\n********************学生清单************************\n");printf("学号姓名性别年龄\n");printf("----------------------------------------------------\n");}}printf("----------------------------------------------------\n");}//查找记录void search(STUDENTS t[],int n){char s[20]; //保存待查找姓名字符串int i; //保存查找到结点的序号system("cls");printf("请输入查找的姓名:\n");scanf("%s",s); //输入待查找姓名getchar();i=find_name(t,n,s); //调用find_name函数,得到一个整数if(i>n-1) //如果整数i值大于n-1,说明没找到printf("没有姓名为%s的学生!\n",s);elseprint(t[i]); //找到,调用显示函数显示记录}//删除函数,参数为记录数组和记录条数int del(STUDENTS t[],int n){char s[20]; //要删除记录的姓名int ch=0;int i;printf("请输入要删除的学生姓名:\n");scanf("%s",s); //输入姓名getchar();i=find_name(t,n,s); //调用find_name函数if(i==n)printf("没有找到名字为%s的学生!\n",s);else{printf("正在删除中!\n");for(;i<n;i++) //从删除位置开始依次前移学生记录{strcpy(t[i].name,t[i+1].name);strcpy(t[i].no,t[i+1].no);strcpy(t[i].sex,t[i+1].sex);t[i].age=t[i+1].age;}n--; //删除后记录数减1printf("删除成功!\n");}return n;//返回记录数}//插入记录函数,参数为结构体数组和记录数int add(STUDENTS t[],int n){STUDENTS temp; //新插入记录信息int i,j;char s[20]; //确定插入在哪个记录之前printf("请输入要插入的学生记录:\n");printf("************************************************\n");printf("学号姓名性别年龄\n");printf("----------------------------------------------------\n");scanf("%s%s%s%d",temp.no,,temp.sex,&temp.age); //输入插入信息getchar();printf("----------------------------------------------------\n");if(n>0){printf("请输入插入位置的姓名,将新记录插入在该名字前:\n");scanf("%s",s); //输入插入位置的姓名getchar();i=find_name(t,n,s); //调用find_name,确定插入位置}elsei=0;for(j=n-1;j>=i;j--) //从最后一个结点开始向后移动一条{strcpy(t[j+1].no,t[j].no); //当前记录的学号拷贝到后一条strcpy(t[j+1].name,t[j].name); //当前记录的姓名拷贝到后一条strcpy(t[j+1].sex,t[j].sex); //当前记录的性别拷贝到后一条t[j+1].age=t[j].age; //当前记录的年龄拷贝到后一条}strcpy(t[i].no,temp.no); //将新插入记录的学号拷贝到第i个位置strcpy(t[i].name,); //将新插入记录的姓名拷贝到第i个位置strcpy(t[i].sex,temp.sex); //将新插入记录的性别拷贝到第i个位置t[i].age = temp.age; //将新插入记录的年龄拷贝到第i个位置n++; //记录数加1return n; //返回记录数}//保存函数,参数为结构体数组和记录数void save(STUDENTS t[],int n){int i;FILE *fp; /指向文件的指针if((fp=fopen("record.txt","wb"))==NULL) /打开文件,并判断打开是否正常{printf("无法打开学生记录文件!\n"); //打开失败exit(1); //退出}printf("\n正在保存中\n");fprintf(fp,"%d",n); //将记录数写入文件fprintf(fp,"\r\n"); //将换行符号写入文件for(i=0;i<n;i++){fprintf(fp,"%-20s%-30s%-10s%-10d",t[i].no,t[i].name,t[i].sex,t[i].age);//格式写入记录fprintf(fp,"\r\n"); //将换行符号写入文件}fclose(fp); //关闭文件printf("****保存成功***\n"); //显示保存成功}//读入函数,参数为结构体数组int load(STUDENTS t[]){int i,n;FILE *fp; //指向文件的指针if((fp=fopen("record.txt","rb"))==NULL) //打开文件{printf("无法打开学生记录文件!\n"); //打开失败exit(1); //退出}fscanf(fp,"%d",&n); //读入记录数for(i=0;i<n;i++)fscanf(fp,"%20s%30s%10s%10d",t[i].no,t[i].name,t[i].sex,&t[i].age);//按格式读入记录fclose(fp); //关闭文件printf("已经成功加载学生记录文件到内存!\n"); //显示保存成功return n; //返回记录数}//按序号显示记录函数void display(STUDENTS t[],int n){int id;printf("请输入序号:\n");scanf("%d",&id); /输入序号getchar();if(id>=0&&id<n) //判断序号是否在记录范围内{print(t[id]); //调用输出函数显示该记录printf("\r\n");}elseprintf("序号为%d 的学生不存在!\n ",id); //如果序号超出范围提示信息}//按姓名排序函数,参数为结构体数组和记录数void sort(STUDENTS t[],int n){int i,j,flag;STUDENTS temp; //临时变量用于交换数据for(i=0;i<n-1;i++){flag=0; //设置标志判断是否发生过交换for(j=0;j<n-1-i;j++)if((strcmp(t[j].name,t[j+1].name))>0) //比较大小{temp=t[j]; t[j]=t[j+1];t[j+1]=temp;flag++;}if(flag==0)break; //如果标志为0,说明没有发生过交换循环结束}printf("排序成功!\n"); //显示排序成功}//复制文件void copy(){char outfile[20]; //目标文件名int i,n;STUDENTS temp[M]; //定义临时变量FILE *sfp,*tfp; //定义指向文件的指针system("cls");if((sfp=fopen("record.txt","rb"))==NULL) //打开学生记录文件{printf("无法打开学生记录文件!\n"); //打开失败exit(1); //退出}printf("请输入目标文件名,形如c:\\f1\\te.txt:\n");scanf("%s",outfile); //输入目标文件名getchar();if((tfp=fopen(outfile,"wb"))==NULL) //打开目标文件{printf("无法打开目标文件!\n"); //打开失败exit(1); //退出}fscanf(sfp,"%d",&n); //读出文件记录数fprintf(tfp,"%d",n); //写入目标文件数fprintf(tfp,"\r\n"); //写入换行符for(i=0;i<n;i++){fscanf(sfp,"%20s%30s%10s%10d\n",temp[i].no,temp[i].name,temp[i].sex,&temp[i].age );//读入记录fprintf(tfp,"%-20s%-30s%-10s%-10d\n",temp[i].no,temp[i].name,temp[i].sex,temp[i].age );printf(tfp,"\r\n"); //写入换行符}fclose(sfp); //关闭源文件fclose(tfp); //关闭目标文件printf("已经成功复制学生记录到目标文件!\n"); //显示复制成功}//显示指定的一条记录void print(STUDENTS temp){printf("\n****************************************************\n");printf("学号姓名性别年龄\n");printf("----------------------------------------------------\n");printf("%-20s%-20s%-10s%-10d\n",temp.no,,temp.sex,temp.age);printf("----------------------------------------------------\n");}//按姓名查找函数,参数为记录数组和记录条数以及姓名sint find_name(STUDENTS t[],int n,char *s){int i;for(i=0;i<n;i++) //记录开始,直到最后一条{if(strcmp(s,t[i].name)==0) //记录中的姓名和待比较的姓名是否相等return i; //相等,则返回该记录的下标号,程序提前结束}return i; //返回i值}//按学号查找函数,参数为记录数组和记录条数以及学号noint find_no(STUDENTS t[],int n,char *no){int i;for(i=0;i<n;i++) /从第一条记录开始,直到最后一条{if(strcmp(no,t[i].no)==0) //记录中的学号和待比较的学号是否相等return i; //相等,则返回该记录的下标号,程序提前结束}return i; //返回i值}//修改函数,按照输入学号修改void modify(STUDENTS t[],int n){char no[20]; //要修改记录的学号int ch=0;int i;printf("请输入要修改的学生学号:\n");scanf("%s",no); //输入学号getchar();i=find_no(t,n,no); //调用find_no函数if(i==n)printf("没有找到学号为%s的学生!\n",no);else{printf("学号为%s的学生修改前:\n",no);print(t[i]);printf("请输入修改后学生记录:\n");printf("学号姓名性别年龄\n");printf("----------------------------------------------------\n");scanf("%s",t[i].no);scanf("%s",t[i].name);scanf("%s",t[i].sex);scanf("%d",&t[i].age);getchar();printf("学号为%s的学生修改后:\n",no);print(t[i]);}}//stuims.c#include"stufun.c"//主函数开始void main(){STUDENTS stu[M]; //定义结构体数组int length; //保存记录长度for(;;) //无限循环{system("cls"); //清屏switch(menu_select()) //调用主菜单函数,返回值作为开关语句的条件{case 0:length=enter(stu);break; //输入记录case 1:list(stu,length);break; //显示全部记录case 2:search(stu,length);break; //按姓名查找记录case 3:length=del(stu,length);break; //按姓名删除记录case 4:modify(stu,length);break; //按学号修改记录case 5:length=add(stu,length);break; //插入记录case 6:save(stu,length);break; //保存文件case 7:length=load(stu);break; //加载文件到内存case 8:display(stu,length);break; //按序号显示记录case 9:sort(stu,length);break; //按姓名排序case 10:copy();break; //复制文件到目标文件case 11:exit(0); //程序结束}printf("按回车键返回主菜单...\n"); //提示信息getchar();}return;}7. 系统操作流程使用该学生信息管理系统时,通过输入菜单序号执行相应的功能模块,例如插入学生记录的操作流程如图14.15所示,其他功能模块的具体操作流程与此类似。