C语言学生信息管理 .docx
精品名师归纳总结同学信息治理系统一. 课程设计目的 :娴熟把握条件语句、循环、数组、函数操作,将本课程所学的学问合理的运用于实践当中。明白一些书上没有的函数及使用方法。为以后的用C 语言乃至其他设计语言解决实际问题打下了一个良好的基础。二. 课程设计的思路及设计过程1. 思路:设计出适合本班同学的同学信息治理系统,可以依据多种查询方式查询班级成员信息。2. 过程:a. 定义所需函数 : void mainvoid mint xvoid putLinkList pvoid allLinkList head,int x b 然后调用函数。c 通过预先输入同学信息 ,实现可以依据学号 姓名 年龄 性别 查询同学信息。d 快捷启动 ,快捷推出。3.程序流程图如下 :4.课程设计中涉及的知识点循环语句:for语句循环。for 语句是 C 语言中所供应的功能最强、使用最为灵敏的一种循环语句。特别适用与循环 次 数 固 定 而 循 环 条 件 不 确 定 的 情 况 。for语 句 最 主 要 的 特 点 是 : 特 别 适 合 已 知 循 环 次 数 的 循 环 语 句 。while语句while语句 可以 实现 当型 循环 , 通 常用 于 能够 确定 的循 环 次 数的 循环 把握 。条件语句:if语句。if 语句是 C 语言中的选择结构语句的主要形式,它依据if 语句后面的条件表达式来准备执行过程。数 组 : 一 维 数 组 元 素 的 应 用 、 赋 值 和 越 界 检 查 。一 维 数 组 声 明 的 一 般 形 式 为 :类型 标 识符数 组 名常量 表达 式。数组元素是组成数组的基本单元。一维数组赋值的方法有:用赋值语句对数组元素逐个赋值。接受初始化赋值和动态赋可编辑资料 - - - 欢迎下载精品名师归纳总结值的方法。为了不行防止不行推测的错误发生,在程序中最好仍是加上数组越界检查程序代码,将数组越界的检查范畴加在程序中,就可以确保程序执行的正确性。因此,可以说数组的边界检验便是程序员的职责。函数:1)、函数的定义。函数定义的形式1传统的定义形式形类型标识符参函数名(说形参列表)明语句/声明部分*功能实现部分*/return表达式。2现代的定义形式 类型标识符函数名(数据类型形式参数,数据类型形式参数,)语句/声*功能明实现部部分分*/return表达式。2)、函数的调用。在函数调用中,对于无参数调用时是没有实际参数列表。实际参数列表中的参数可以是 常 数、 变 量或 其他 构 造 类 型 数 据 及 表达 式, 各 是 参 数之 间 用 逗号 分隔 。在C语 言 程 序 中 , 可 以 用 以 下 几 种 方 式 调 用 函 数 :1函数表达式2函数语句3函数实参3 ) 、 函 数 变 量 的 作 用 域 。C 语言中全部的变量都有自己的作用域。变量说明的方式不同,其作用域也不同。 C 语 言 中 的 变 量 , 按 作 用 域 范 围 可 分 为 两 种 , 即 局 部 变 量 和 全 局 变 量 。局部变量:局部变量也称为内部变量。局部变量是在函数内作定义说明的,其作用域仅 限 于 函 数 内 , 离 开 函 数 后 在 使 用 这 种 变 量 是 非 法 的 。可编辑资料 - - - 欢迎下载精品名师归纳总结全局变量:全局变量也称为外部变量,它是在函数外部定义的变量。它不属于哪一个函数,它属于一个源程序文件。其作用域是从定义变量的位置开头到当前源文件结束。4 )、数组元素作为函数的参数。假犹如一个源文件中,全局变量与局部变量同名,就在局部变量的作用范畴内全局变 量被“屏蔽”了,即它不起作用。发生函数调用时,把作为实参的数组元素的值传送给形参,实现一一对应、单向的至传递。5 )、数组名作为函数的参数。用数组名作为函数参数时,要求形参和相对应的实参都必需是类型相同的数组,都必须有明确的数组说明。数组名实质上就是数组的首的址,因此数组名作函数参数时所进行的传递只是的址的传递。数组名作函数参数时,由于实际上形参和实参共享同一数组,因此当形参变化时,形参和实参共享的数组就发生了变化,即实参也随之变 化。4.程序设计如下 :#include "stdio.h" #include "stdlib.h" #include "conio.h" #include "string.h" #define K 8#define ERROR 0#define OK 1char kmK7 。 /科 目int KM=0 。 /科目数int n =0 。 /人 数int Y =20 。/ 每页显示的人数/* 单链表结构 */ typedef struct LNodechar ID 8 。/学号char name8 。 / 姓名char sex 3。 / 性别char age 4。/年龄char cj K6 。 / 成果struct LNode*next。*LinkList。LinkList InsertLinkList head。LinkList sortLinkList head,int x。void mint x 。/* 创建一个带头结点的空链表*/LinkList createvoidLinkList L。可编辑资料 - - - 欢迎下载精品名师归纳总结L=LinkListmallocsizeofstruct LNode。ifL.=NULLL->next=NULL。return L 。/* 设置科目 :返回科目数 */ int setKMint i=0,kk=KM。char x1,s,y1 。ifKM>0printf" 当前设置 :" 。fori=0 。i<KM 。i+ifi%4=0printf"nn"。printf"%d.%-5s ",i+1,kmi。printf"0- 退出 最大值 :%d",K 。 ifKM>0printf"nn设置科目数 :" 。scanf"%s",x 。ifatoix=0return KM。whileatoix<1|atoix>Ksystem"cls" 。 m1 。ifKM>0printf" 输入不合法 ." 。fori=0 。 i<KM 。 i+ifi%4=0printf"nn"。printf"%d.%-5s ",i+1,kmi。 printf"0- 退出 最大值 :%d",K 。elseprintf" 没有资料,请设置资料.n" 。printf"n设置科目数 :"。scanf"%s",x 。ifatoix=0return KM。ifKM>0printf"n真的要修改吗 .Y/N" 。s=getch。ifs.='y' && s.='Y'return kk。 ifatoix>KMdoifKM=0s='y'。elseprintf"n是否保留原先设置 .Y/N" 。s=getch 。 ifs='y' | s='Y'fori=KM。i<atoix 。i+printf"n输入第 %d 门科目名称 :",i+1 。 getskmi 。whilestrlenkmi=0|strlenkmi>7getskmi。else ifs='n' | s='N'fori=0 。i<atoix 。i+printf"n输入第 %d 门科目名称 :",i+1 。 getskmi 。whilestrlenkmi=0|strlenkmi>7getskmi。whiles.='y' && s.='Y' && s.='n' && s.='N'。elsedosystem"cls" 。 m1 。printf" 当前设置 :" 。可编辑资料 - - - 欢迎下载精品名师归纳总结fori=0 。i<atoix 。i+ifi%4=0printf"nn"。printf"%d.%-5s ",i+1,kmi。 printf"nn输入需要修改科目的序号:" 。scanf"%s",y 。ifatoiy=0return kk。ifatoiy>0 && atoiy<=atoixprintf"n输入第 %d 门科目名称 :",atoiy 。getskmatoiy-1 。getskmatoiy-1 。whilestrlenkmatoiy-1=0|strlenkmatoiy-1>7printf"输入不合法 .n 请重新输入第 %d 门科目名称 :",atoiy 。getskmatoiy-1 。whileatoiy<1 | atoiy>atoix。 return atoix 。/* 读入数据 */ int loadkm int i。FILE*fp。iffp=fopen"km.txt","r+"=NULLfp=fopen"km.txt","w+"。fori=0 。.feoffp 。i+fgetskmi,7,fp。fscanffp," " 。ifstrlenkmi.=0KM+。 fclosefp 。return OK 。LinkList loadLinkList headint i=0,j。LinkList s,t,p。FILE*fp。loadkm 。iffp=fopen"data.txt","r+"=NULLreturn head。iffgetcfp=EOFsystem"cls" 。 m1 。whileKM=0system"cls" 。 m1 。printf" 没有资料,请设置资料.n" 。KM=setKM。printf"n" 。system"cls" 。m1 。printf" 添加数据 :n" 。Inserthead。return head 。/fseekfp,0L,0 。rewindfp 。p=LinkListmallocsizeofstruct LNode。fscanffp,"%s ",p->ID。fgetsp->name,8,fp 。fscanffp,"t%s %s ",p->sex,p->age 。fori=0 。i<KM 。i+fscanffp,"%s ",p->cji。fscanffp,"n" 。fori=KM 。 i<K 。 i+strcpyp->cji,"0"。p->next=NULL。head->next=p 。可编辑资料 - - - 欢迎下载精品名师归纳总结while.feoffpp=p->next。p=LinkListmallocsizeofstruct LNode。fscanffp,"%s ",p->ID。fgetsp->name,8,fp 。fscanffp,"t%s %s ",p->sex,p->age 。fori=0 。i<KM 。i+fscanffp,"%s ",p->cji。fscanffp,"n" 。fori=KM。i<K 。i+strcpyp->cji,"0"。p->next=NULL。i=j=0 。s=head。whileatols->ID<=atolp->ID&&p->next s=s->next 。i+ 。 s=head。whiles->next&&j<is=s->next 。j+ 。 t=s->next 。s->next=p 。p->next=t 。 s=head 。i=0 。whiles->next s=s->next 。i+ 。n=i 。fclosefp 。return head 。/* 储存文件 */int saveLinkList head int i。LinkList p=head->next。FILE*fp,*fpp。iffp=fopen"data.txt","w+"=NULLreturn ERROR。iffpp=fopen"km.txt","w+"=NULLreturn ERROR。fori=0 。i<KM 。i+fprintffpp,"%s",kmi。fprintffpp,""。 whilepfprintffp,"%s ",p->ID。fori=0 。i<8-intstrlenp->ID。 i+fprintffp," "。fputsp->name,fp 。fori=0 。i<8-intstrlenp->name 。i+fprintffp," "。fprintffp," %s %s ",p->sex,p->age。fori=0 。i<KM 。i+fprintffp,"%s ",p->cji。fprintffp,"n"。p=p->next 。 fclosefp 。fclosefpp 。return OK 。/* 平均成果 */可编辑资料 - - - 欢迎下载精品名师归纳总结double pjLinkList p int i。double pj=0 。fori=0 。i<KM 。i+ pj+=atofp->cji。pj/=KM。return pj 。/* 排头 */ btint i。printf" 学号 t 姓名 t 性别 年龄 "。fori=0 。i<KM 。i+printf"%-5s",kmi。printf" 平均 n" 。printf"-"。ifKM<9 fori=0 。i<KM+1 。i+printf"-"。printf"n" 。 elsefori=0 。i<KM+1 。i+printf"-"。/* 输出当前指针信息 */ void putLinkList p int i。printf"%st",p->ID。printf"%st",p->name。printf" %s ",p->sex 。printf"%3d ",atoip->age。fori=0 。i<KM 。i+ ifatofp->cji<10printf" %-5g",atofp->cji。else printf"%-6g",atofp->cji。ifpjp<10printf" %1.2fn",pjp。else printf"%2.2fn",pjp。 int pddchar x,int zint y=strlenx,k,i。ifz=1fori=0 。i<y 。 i+ifxi>57|xi<48return ERROR。ify>7return ERROR 。 ifz=2fori=0 。i<y 。 i+ifxi=46k+。ifxi>57|xi<46|xi=47|k=2return ERROR。 return OK 。/* 输出信息 */void allLinkList head,int x LinkList p=head->next。int i,j=0 。char a14,a24,t,k1,c16,c26,tmp3,ID18,ID28。double zK=0,zpj=0.0。char n10,s3 。ifx=0 system"cls" 。bt 。whilep putp 。可编辑资料 - - - 欢迎下载精品名师归纳总结fori=0 。 i<KM 。 i+zi+=atofp->cji。j+ 。ifj%Y=0 ifj.=0 printf"-"。ifKM<8fori=0 。i<KM+1 。 i+printf"-"。printf"n"。 elsefori=0 。i<KM+1 。i+printf"-"。printf" 按任意键连续 " 。getch 。system"cls" 。bt 。p=p->next 。 ifx=1printf" 按学号搜寻 "。printf"nn学号范畴 :" 。scanf"%s",ID1 。scanf"%s",ID2 。whilepddID1,1=ERROR|pddID2,1=ERRORsystem"cls" 。m2。printf" 输入错误 ." 。printf"nn学号范畴 :" 。scanf"%s",ID1 。scanf"%s",ID2 。 ifatolID1>atolID2strcpytmp,ID1 。strcpyID1,ID2 。strcpyID2,tmp 。system"cls" 。bt 。whilep ifatolID1<=atolp->ID&&atolID2>=atolp->IDputp 。fori=0 。i<KM 。i+zi+=atofp->cji。j+ 。ifj%Y=0ifj.=0printf"-"。ifKM<8fori=0 。 i<KM+1 。i+printf"-"。printf"n"。 elsefori=0 。i<KM+1 。i+printf"-"。printf" 按任意键连续 " 。getch 。system"cls" 。bt 。 p=p->next 。ifx=2printf" 按姓名搜寻 "。printf"nn姓名 :" 。scanf"%s",n 。system"cls" 。bt 。whilep.=NULLifstrcmpn,p->name=0可编辑资料 - - - 欢迎下载精品名师归纳总结putp 。fori=0 。i<KM 。i+zi+=atofp->cji。j+ 。ifj%Y=0ifj.=0printf"-"。ifKM<8fori=0 。i<KM+1 。i+printf"-"。printf"n"。 elsefori=0 。i<KM+1 。i+printf"-"。printf" 按任意键连续 " 。getch 。system"cls" 。bt 。 p=p->next 。ifx=3printf" 按年龄搜寻 " 。printf"nn年龄范畴 :" 。scanf"%s",a1 。scanf"%s",a2 。whilepdda2,1=ERROR | pdda1,1=ERROR | atoia1>100 | atoia2>100printf" 输入错误 ." 。printf"nn年龄范畴 :" 。scanf"%s",a1 。scanf"%s",a2 。ifatofa1>atofa2strcpytmp,a1 。strcpya1,a2 。strcpya2,tmp 。system"cls" 。bt 。whilepifatoip->age>=atoia1ifatoip->age<=atoia2putp 。fori=0 。i<KM 。i+zi+=atofp->cji。j+ 。ifj%Y=0 ifj.=0printf"-"。ifKM<8fori=0 。i<KM+1 。 i+printf"-"。printf"n"。elsefori=0 。i<KM+1 。 i+printf"-"。printf" 按任意键连续 "。getch 。system"cls" 。bt 。可编辑资料 - - - 欢迎下载精品名师归纳总结p=p->next 。ifx=4printf" 按性别搜寻 nn1. 男 2.女nn 性别 :" 。t=getch 。ift='1'strcpys,"男"。else ift='2'strcpys," 女" 。else strcpys,"男" 。system"cls" 。bt 。whilepifstrcmps,p->sex=0putp 。fori=0 。i<KM 。i+zi+=atofp->cji。j+ 。ifj%Y=0ifj.=0printf"-"。ifKM<8fori=0 。i<KM+1 。i+printf"-"。printf"n"。elsefori=0 。i<KM+1 。i+printf"-"。printf" 按任意键连续 " 。getch 。system"cls" 。bt 。p=p->next 。ifx=5printf" 按成果搜寻 " 。fori=0 。i<KM 。i+ifi%4=0printf"nn"。printf"%d.%-5s ",i+1,kmi。printf"nn选择科目 :" 。scanf"%s",k 。whileatoik>KM|atoik<=0system"cls" 。 m2。printf" 超出范畴 ." 。fori=0 。 i<KM 。 i+ifi%4=0printf"nn"。可编辑资料 - - - 欢迎下载精品名师归纳总结printf"%d.%-5s ",i+1,kmi。printf"nn选择科目 :" 。scanf"%s",k 。printf"n%s成果范畴 :",kmatoik-1。scanf"%s",c1 。scanf"%s",c2 。whilepddc2,2=ERROR | pddc1,2=ERROR | atofc2>100 | atofc1>100printf" 输入错误 ." 。printf"n成果范畴 :"。scanf"%s",c1 。scanf"%s",c2 。ifatofc1>atofc2strcpytmp,c1 。strcpyc1,c2 。strcpyc2,tmp 。system"cls" 。bt 。whilepifatofp->cjatoik-1>=atofc1ifatofp->cjatoik-1<=atofc2putp 。fori=0 。i<KM 。i+zi+=atofp->cji。j+ 。ifj%Y=0ifj.=0printf"-"。ifKM<8fori=0 。i<KM+1 。 i+printf"-"。printf"n"。elsefori=0 。i<KM+1 。 i+printf"-"。printf" 按任意键连续 "。getch 。system"cls" 。bt 。p=p->next 。printf"-"。ifj>0可编辑资料 - - - 欢迎下载精品名师归纳总结ifKM<8fori=0 。 i<KM+1 。i+printf"-"。printf"n" 。elsefori=0 。 i<KM+1 。i+printf"-"。printf" 共有 %d 人t",j 。printf" 平均成果 : " 。fori=0 。i<KM 。i+zi/=j。ifzi<10.0 printf"%1.2f ",zi。else printf"%2.2f ",zi。 zpj+=zi 。zpj/=KM 。printf"%2.2fn",zpj。elsesystem"cls" 。m1 。printf"n未找到数据 ." 。getch 。/* 逆序表 */void L_convertLinkList headLinkList s=head 。LinkList p1=LinkListmallocsizeofstruct LNode 。LinkList p2=LinkListmallocsizeofstruct LNode 。LinkList p3=LinkListmallocsizeofstruct LNode 。p1=s->next 。p2=p1->next 。p3=p2->next 。p1->next=NULL。whilep3->nextp2->next=p1 。p1=p2 。p2=p3 。p3=p3->next 。p2->next=p1 。p3->next=p2 。s->next=p3 。head=s 。/判定错误int pdLinkList p,int q,int hint i,x,y=0 。ifq=1x=strlenp->age 。可编辑资料 - - - 欢迎下载精品名师归纳总结fori=0 。i<x 。i+ifp->agei>57|p->agei<48return ERROR。ifq=2x=strlenp->cjh 。fori=0 。i<x 。i+ifp->cjhi=46y+。ifp->cjhi>57|p->cjhi<46|p->cjhi=47|y=2return ERROR。return OK 。/* 修改成果 */LinkList editLinkList head,char D8int i=0 。char s,x,z1 。LinkList p=head->next。whileatoip->ID.=atoiDp=p->next 。if.pprintf" 未找到数据 .n" 。getch。return head 。whilei>=0system"cls" 。m1 。printf"1. 修改基本信息2.修改成果 0.退出 n 请选择 :" 。x=getch 。ifx='0'return head。else ifx='1'system"cls" 。 m1。whilexprintf"n基本信息 : 1.姓名 :%s 2.性别 :%s 3.年龄 :%s n 请选择 :",p->name,p->sex,p->age 。x=getch 。ifx='0'break 。ifx='1'printf"n输入新的姓名 :"。getsp->name 。getsp->name。whilepddp->name,1=OK|strlenp->name>7printf" 输入错误 .n 重新输入姓名 :" 。getsp->name 。else ifx='2'可编辑资料 - - - 欢迎下载精品名师归纳总结printf"nnt1. 男 2.女 nn 请选择 :" 。s=getch 。ifs='1'printf" 男" 。strcpyp->sex," 男"。else ifs='2'printf" 女" 。strcpyp->sex," 女"。else strcpyp->sex," 男" 。else ifx='3'printf"n输入新的年龄 :"。scanf"%s",p->age 。whileatofp->age.=atoip->age|atofp->age<1|atofp->age>100|pdp,1,0=ERRORprintf" 输入错误,重新输入年龄:" 。scanf"%s",p->age 。ifx='1'|x='2'|x='3'printf"n修改成功 _" 。getch 。break 。continue 。else ifx='2'system"cls" 。 m1。printf" 科目设置 :n" 。fori=0 。 i<KM 。 i+ifi%4=0printf"nn"。printf" %d.%-5s %g",i+1,kmi,atofp->cji。printf"nn选择序号 :" 。scanf"%s",z 。ifatoiz=0continue。whileatoiz>KM | atoiz<1printf" 输入错误 ,重新输入 :" 。scanf