1、C语言课程方案设计书学生信息管理系统封面作者:PanHongliang仅供个人学习 学生信息管理系统一. 课程设计目的:熟练掌握条件语句、循环、数组、函数操作,将本课程所学的知识合理地运用于实践当中。了解一些书上没有的函数及使用方法。为以后的用C语言乃至其他设计语言解决实际问题打下了一个良好的基础。二. 课程设计的思路及设计过程1.思路:设计出适合本班同学的同学信息管理系统,可以按照多种查询方式查询班级成员信息。2.过程:a. 定义所需函数: void main()void m(int x)void put(LinkList p)void all(LinkList head,int x)b 然
2、后调用函数;c通过预先输入学生信息,实现可以按照学号 姓名 年龄 性别 查询学生信息;d 快捷启动,快捷推出。3.程序流程图如下:4. 课程设计中涉及的知识点 循环语句:for语句循环。 for语句是C语言中所提供的功能最强、使用最为灵活的一种循环语句。特别适用与循环次数固定而循环条件不确定的情况。 for语句最主要的特点是:特别适合已知循环次数的循环语句。while语句while语句可以实现当型循环,通常用于能够确定的循环次数的循环控制。条件语句:if语句。if语句是C语言中的选择结构语句的主要形式,它根据if语句后面的条件表达式来决定执行过程。 数组:一维数组元素的应用、赋值和越界检查。
3、一维数组声明的一般形式为: 类型标识符 数组名 常量表达式; 数组元素是组成数组的基本单元。一维数组赋值的方法有:用赋值语句对数组元素逐个赋值;采用初始化赋值和动态赋值的方法。为了不可避免不可预测的错误发生,在程序中最好还是加上数组越界检查程序代码,将数组越界的检查范围加在程序中,就可以确保程序执行的正确性。因此,可以说数组的边界检验便是程序员的职责。函数:1)、函数的定义。函数定义的形式1 传统的定义形式 类型标识符 函数名( 形参列表 )形参说明 声明部分语句 / * 功能实现部分 * / return 表达式;2 现代的定义形式 类型标识符 函数名( 数据类型 形式参数,数据类型 形式参
4、数,) 声明部分语句 / * 功能实现部分 * / return表达式;2)、函数的调用。在函数调用中,对于无参数调用时是没有实际参数列表。实际参数列表中的参数可以是常数、变量或其他构造类型数据及表达式,各是参数之间用逗号分隔。在C语言程序中,可以用以下几种方式调用函数:1 函数表达式2 函数语句3 函数实参3)、函数变量的作用域。C语言中所有的变量都有自己的作用域。变量说明的方式不同,其作用域也不同。C语言中的变量,按作用域范围可分为两种,即局部变量和全局变量。局部变量:局部变量也称为内部变量。局部变量是在函数内作定义说明的,其作用域仅限于函数内,离开函数后在使用这种变量是非法的。全局变量:
5、全局变量也称为外部变量,它是在函数外部定义的变量。它不属于哪一个函数,它属于一个源程序文件。其作用域是从定义变量的位置开始到当前源文件结束。4)、数组元素作为函数的参数。如果同一个源文件中,全局变量与局部变量同名,则在局部变量的作用范围内全局变量被“屏蔽”了,即它不起作用。发生函数调用时,把作为实参的数组元素的值传送给形参,实现一一对应、单向的至传递。5)、数组名作为函数的参数。用数组名作为函数参数时,要求形参和相对应的实参都必须是类型相同的数组,都必须有明确的数组说明。数组名实质上就是数组的首地址,因此数组名作函数参数时所进行的传递只是地址的传递。数组名作函数参数时,由于实际上形参和实参共享
6、同一数组,因此当形参变化时,形参和实参共享的数组就发生了变化,即实参也随之变化。4.程序设计如下:#include stdio.h#include stdlib.h#include conio.h#include string.h#define K 8 #define ERROR 0 #define OK 1 char kmK7。 /科 目int KM=0 。 /科目数int n =0 。 /人 数int Y =20。 /每页显示的人数/*单链表结构*/typedef struct LNode char ID 8。 /学号 char name8。 /姓名 char sex 3。 /性别 cha
7、r age 4。 /年龄 char cj K6。 /成绩 struct LNode*next 。*LinkList 。LinkList Insert(LinkList head)。LinkList sort(LinkList head,int x)。void m(int x)。/*创建一个带头结点的空链表*/LinkList create(void)LinkList L 。 L=(LinkList)malloc(sizeof(struct LNode)。 if(L!=NULL)L-next=NULL 。 return L 。/*设置科目:返回科目数*/int setKM()int i=0,kk
8、=KM。 char x1,s,y1。 if(KM0) printf(当前设置:)。 for(i=0。i0) printf(nn设置科目数:)。 scanf(%s,x)。 if(atoi(x)=0)return KM 。 while(atoi(x)K)system(cls)。m(1)。 if(KM0) printf(输入不合法!)。 for(i=0。i0) printf(n真的要修改吗?(Y/N)。 s=getch()。 if(s!=y & s!=Y)return kk。 if(atoi(x)KM) doif(KM=0)s=y。 else printf(n是否保留原来设置?(Y/N)。 s=ge
9、tch()。 if(s=y | s=Y)for(i=KM。i7)gets(kmi)。 else if(s=n | s=N)for(i=0。i7)gets(kmi)。while(s!=y & s!=Y & s!=n & s!=N)。 elsedosystem(cls)。m(1)。 printf(当前设置:)。 for(i=0。i0 & atoi(y)7) printf(输入不合法!n请重新输入第%d门科目名称:,atoi(y)。 gets(kmatoi(y)-1)。 while(atoi(y)atoi(x)。 return atoi(x)。/*读入数据*/int loadkm() int i 。
10、 FILE*fp 。 if(fp=fopen(km.txt,r+)=NULL)fp=fopen(km.txt,w+)。 for(i=0。!feof(fp)。i+)fgets(kmi,7,fp)。 fscanf(fp, )。 if(strlen(kmi)!=0)KM+。 fclose(fp)。 return OK 。LinkList load(LinkList head)int i=0,j 。 LinkList s,t,p 。 FILE*fp 。 loadkm()。 if(fp=fopen(data.txt,r+)=NULL)return head 。 if(fgetc(fp)=EOF)syst
11、em(cls)。m(1)。 while(KM=0)system(cls)。m(1)。 printf(没有资料,请设置资料!n)。 KM=setKM()。 printf(n)。 system(cls)。m(1)。 printf(添加数据:n)。 Insert(head)。 return head 。 /fseek(fp,0L,0)。 rewind(fp)。 p=(LinkList)malloc(sizeof(struct LNode)。 fscanf(fp,%s ,p-ID)。 fgets(p-name,8,fp)。 fscanf(fp,t%s %s ,p-sex,p-age)。 for(i=0
12、。icji)。 fscanf(fp,n)。 for(i=KM。icji,0)。 p-next=NULL 。 head-next=p 。 while(!feof(fp)p=p-next 。 p=(LinkList)malloc(sizeof(struct LNode)。 fscanf(fp,%s ,p-ID)。 fgets(p-name,8,fp)。 fscanf(fp,t%s %s ,p-sex,p-age)。 for(i=0。icji)。 fscanf(fp,n)。 for(i=KM。icji,0)。 p-next=NULL 。 i=j=0 。 s=head。 while(atol(s-ID
13、)ID)&p-next) s=s-next 。 i+。 s=head。 while(s-next&jnext 。 j+。 t=s-next 。 s-next=p 。 p-next=t 。 s=head 。 i=0 。 while(s-next) s=s-next 。 i+。 n=i 。 fclose(fp)。 return head 。/*保存文件*/int save(LinkList head) int i 。 LinkList p=head-next 。 FILE*fp,*fpp 。 if(fp=fopen(data.txt,w+)=NULL)return ERROR 。 if(fpp=f
14、open(km.txt,w+)=NULL)return ERROR 。 for(i=0。iID)。 for(i=0。iID)。i+)fprintf(fp, )。 fputs(p-name,fp)。 for(i=0。iname)。i+)fprintf(fp, )。 fprintf(fp, %s %s ,p-sex,p-age)。 for(i=0。icji)。 fprintf(fp,n)。 p=p-next 。 fclose(fp)。 fclose(fpp)。 return OK 。/*平均成绩*/double pj(LinkList p) int i 。 double pj=0 。 for(i=
15、0。icji)。 pj/=KM 。 return pj 。/*排头*/bt()int i 。 printf(学号t姓名t性别 年龄 )。 for(i=0。iKM。i+)printf(%-5s,kmi)。 printf(平均n)。 printf(-)。 if(KM9) for(i=0。iKM+1。i+)printf(-)。 printf(n)。 else for(i=0。iID)。 printf(%st,p-name)。 printf( %s ,p-sex)。 printf(%3d ,atoi(p-age)。 for(i=0。icji)cji)。 else printf(%-6g,atof(p-
16、cji)。 if(pj(p)10)printf( %1.2fn,pj(p)。 else printf(%2.2fn,pj(p)。int pdd(char x,int z)int y=strlen(x),k,i。 if(z=1) for(i=0。i57|xi7)return ERROR。 if(z=2) for(i=0。i57|xinext 。 int i,j=0 。 char a14,a24,t,k1,c16,c26,tmp3,ID18,ID28。 double zK=0,zpj=0.0 。 char n10,s3。 if(x=0) system(cls)。 bt()。 while(p) pu
17、t(p)。 for(i=0。icji)。 j+。 if(j%Y=0) if(j!=0) printf(-)。 if(KM8) for(i=0。iKM+1。i+)printf(-)。 printf(n)。 else for(i=0。inext 。 if(x=1) printf(按学号搜索)。 printf(nn学号范围:)。 scanf(%s,ID1)。 scanf(%s,ID2)。 while(pdd(ID1,1)=ERROR|pdd(ID2,1)=ERROR) system(cls)。m(2)。 printf(输入错误!)。 printf(nn学号范围:)。 scanf(%s,ID1)。 s
18、canf(%s,ID2)。 if(atol(ID1)atol(ID2) strcpy(tmp,ID1)。 strcpy(ID1,ID2)。 strcpy(ID2,tmp)。 system(cls)。bt()。 while(p) if(atol(ID1)ID)&atol(ID2)=atol(p-ID) put(p)。 for(i=0。icji)。 j+。 if(j%Y=0) if(j!=0) printf(-)。 if(KM8) for(i=0。iKM+1。i+)printf(-)。 printf(n)。 else for(i=0。inext。 if(x=2) printf(按姓名搜索)。 pr
19、intf(nn姓名:)。 scanf(%s,n)。 system(cls)。 bt()。 while(p!=NULL) if(strcmp(n,p-name)=0) put(p)。 for(i=0。icji)。 j+。 if(j%Y=0) if(j!=0) printf(-)。 if(KM8) for(i=0。iKM+1。i+)printf(-)。 printf(n)。 else for(i=0。inext。 if(x=3) printf(按年龄搜索)。 printf(nn年龄范围:)。 scanf(%s,a1)。 scanf(%s,a2)。 while(pdd(a2,1)=ERROR | p
20、dd(a1,1)=ERROR | atoi(a1)100 | atoi(a2)100) printf(输入错误!)。 printf(nn年龄范围:)。 scanf(%s,a1)。 scanf(%s,a2)。 if(atof(a1)atof(a2) strcpy(tmp,a1)。 strcpy(a1,a2)。 strcpy(a2,tmp)。 system(cls)。bt()。 while(p) if(atoi(p-age)=atoi(a1) if(atoi(p-age)=atoi(a2) put(p)。 for(i=0。icji)。 j+。 if(j%Y=0) if(j!=0) printf(-
21、)。 if(KM8) for(i=0。iKM+1。i+)printf(-)。 printf(n)。 else for(i=0。inext 。 if(x=4) printf(按性别搜索nn 1.男 2.女nn性别:)。 t=getch()。 if(t=1)strcpy(s,男)。 else if(t=2)strcpy(s,女)。 else strcpy(s,男)。 system(cls)。bt()。 while(p) if(strcmp(s,p-sex)=0) put(p)。 for(i=0。icji)。 j+。 if(j%Y=0) if(j!=0) printf(-)。 if(KM8) for(i=0。iKM+1。i+)printf(-)。 printf(n)。 els
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1