2022年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"%s",z ;printf" 输入新的 %s 成果 :",kmatoiz-1 ;scanf"%s",p->cjatoiz-1;whileatofp->cjatoiz-1<0.01|atofp->cjatoiz-1>100|pdp,2,atoiz-1=ERRORprintf" 输入错误,请重新输入 %s 成果 :",kmatoiz-1 ;欢迎下载精品学习资源scanf"%s",p->cjatoiz-1;system"