C语言课程设计__学生证管理系统课案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言课程设计
院系:
姓名:
学号:
班号:
指导教师:
日期:2010年9月
目录
一、实验目的 (3)
二、实验内容 (3)
三、需求分析 (3)
四、概要设计 (4)
1.方案设计 (4)
2.数据结构说明 (4)
3.模块功能说明 (4)
4.程序可以满足功能 (5)
五、详细设计 (5)
六、调试情况,设计技巧及体会 (12)
七、源程序清单 (16)
实验题目学生证管理系统
一、实验目的
1.熟悉C语言程序的编辑、编译链接和运行的过程,至少能够用一种编译器较熟练地编辑、编译及调试程序。
2.掌握C语言数据类型,如何定义一个整型、字符型和实型的变量,以及对它们赋值的方法。
3.熟练运用if语句和switch语句以及嵌套应用。
涉及循环调用的,了解并掌握三种控制语句while、do-while和for语句。
4.学习并掌握C语言定义函数的基本方法、声明函数及调用函数的方法和过程。
5. 掌握文件和文件指针的概念以及文件的定义方法,认识文件打开、关闭、读、写等文件基本操作函数。
6.掌握结构体类型变量、数组的定义和使用。
7.了解指针和链表的概念,掌握指针的定义和使用指针变量的方法以及链表的正确用法。
灵活使用链表来储存学生信息。
8.掌握数组的定义、引用以及输入输出的方法、通过字符数组存储字符串,进一步使用字符串
二、实验内容
学生证的管理程序。
该程序应该具有下列功能:
(1)录入某位学生的学生证信息;
(2)给定学号,显示某位学生的学生证信息;
(3)给定某个班级的班号,显示该班所有学生的学生证信息;
(4)给定某位学生的学号,修改该学生的学生证信息;
(5)给定某位学生的学号,删除该学生的学生证信息;
(6)提供一些统计各类信息的功能。
三、需求分析
系统功能:
1.显示全部的学生证信息;
2.给定某位学生的学号或姓名,查询或修改该学生的学生证信息;
3. 给定某位学生的学号或姓名,删除该学生的学生证信息;
4. 增加学生信息;
5. 提供一些统计各类信息的功能。
例如统计学生数,班级数,每个班级的学生数;
6. 能够对学号和班级进行升序和降序排序;
7. 用文件的形式将录入的数据进行存储,并从其中读取数据。
性能描述:
各种功能都可以满足;程序相对较小,因而运行时反应比较迅速,不存在响应不及时地问题。
四、概要设计
1.方案设计
2.数据结构说明
1、建立一个小型的学生证管理系统.可对学生的信息进行管理.
2、学生信息应包括学生的学号,姓名,性别,班级的信息..
3、数据必须以文件形式存放.
分析:首先进入信息的录入和储存,录入学生基本信息,然后储存在文件中.其次做更新操作(插入,删除,修改).然后作查询,排序等操作。
3.模块功能说明
luru()
用于储存所输入的学生信息到指定文件
chaxunx()
用于按学号查找某个学生信息并打印该生信息
chaxunb()
主模块 创建学生信息
信息修改 添加 修改 信息修改 信息浏览 按姓名 按班级
学生信息删除 按学号排序
用于按班级查找某个学生信息并打印该生信息
xiugai()
用于修改某个学号的学生信息
shanchu()
用于按学号删除某个学生的信息
tongji()
用于统计学生的信息
4.程序可以满足功能
1.各模块间通过菜单切换和调用
2.主函数通过调用菜单函数实现对各功能模块的调用,各功能模块间根据需要可相互调用。
3.程序能够保证各模块功能的独立和数据共享。
4.相近功能以级联菜单的形式集成。
五、详细设计
①主函数主函数较多、较复杂,已经和主菜单函数合并,主菜单函数里还包括了各自的二级菜单,并已经开始了对各个函数的调用。
为了程序显示的清晰可读,应先清屏之后调用菜单函数。
[程序]
void main()
{
int n;
system("cls"); //清屏
printf("欢迎使用学生证管理系统\n");
printf("1、录入学生信息\n");
printf("2、查询学生信息\n");
printf("3、查询班级信息\n");
printf("4、修改学生信息\n");
printf("5、删除学生信息\n");
printf("6、统计学生信息\n");
printf("7、退出\n");
printf(" 请输入功能代码:[1-5]");
scanf("%d",&n);
switch(n)
{
case 1:luru();break;
case 2:chaxunx();break;
case 3:chaxunb();break;
case 4:xiugai();break;
case 5:shanchu();break;
case 6:tongji();break;
case 7:exit(1);break;
default:printf("error\n");
}
}
②输入模块用于输入学生的相关信息包括姓名、性别、学号、班级、单位,并将信息存储到stu_kard.txt文件中。
[程序]
void luru()
{
int i=0;
FILE *fp;
system("cls");
printf("请输入学生信息(以空格隔开)\n姓名性别学号班号单位\n");
scanf("%s%s%d%d%s",&stud[i].name,&stud[i].sex,&stud[i].xuehao,&stud[i].ba nhao,&stud[i].danwei);
fp=fopen("stu_kard.txt","a");//追加方式打开文本文件
if(fp==NULL) //打开失败
{
printf("cannot open file\n");
return;
}
else //打开成功
{
if(fwrite(&stud[i],sizeof(struct student),1,fp)!=1)
printf("file write error\n");
}
fclose(fp); //关闭文件
return;
}
③按学号查询模块用于按学号查询学生信息。
输入所要查询的学生学号,程序读取stu_kard.txt文件中的信息查找出相关的学生信息并将其显示出来。
[程序]
void chaxunx() //查询学生信息函数
{
int i=0;
char it;
int xuehao;
FILE *fp;
system("cls");
//以下是查询某个学生的个人信息
printf("是要查询学生个人信息吗?yes--y no--n 请输入:");
scanf("%s",&it);
if(it=='y') //输入y 表示要查询学生的个人信息
{
printf("请输入学号:");
scanf("%d",&xuehao);
fp=fopen("stu_kard.txt","r");//只读方式打开文本文件
while(!feof(fp)) //循环从文件总读取记录,与输入学号相比,
{
fread(&stud[i],sizeof(struct student),1,fp);
if(xuehao==stud[i].xuehao)
{
printf("查询信息如下:姓名性别学号班号单位\n");
printf("%17s %5s %6d %6d %8s\n",stud[i].name,stud[i].sex,stud[i].xuehao,stud[i].ba nhao,stud[i].danwei);
break; //查询到该学生信息后退出循环
}
}
if(stud[i].xuehao!=xuehao)
printf("查无此人!");
fclose(fp);
}
else if(it=='n') {printf("取消查询\n");}
else {printf("输入错误!\n");}
}
④按班级查询模块用于按班级查询学生信息。
输入所要查询的班号,程序读取stu_kard.txt文件中的信息查找出对应班级下相关的学生信息并将其显示出来。
[程序]
void chaxunb() //查询班级信息函数
{
int i;
char it;
int banhao;
FILE *fp;
i=0;
printf("是要查询学生班级信息吗?yes--y no--n 请输入:");
scanf("%s",&it);
if(it=='y') //输入y 表示要查询学生的班级信息
{
printf("请输入班号:");
scanf("%d",&banhao);
fp=fopen("stu_kard.txt","r");
printf("查询信息如下:姓名性别学号班号单位\n");
for(i=0;!feof(fp);i++)//循环从文件总读取记录,与stud[i].banji相比,
{
fread(&stud[i],sizeof(struct student),1,fp);
if(banhao==stud[i].banhao) //如果banji号相同,显示该条记录
printf("%17s %5s %6d %6d %8s\n",stud[i].name,stud[i].sex,stud[i].xuehao,stud[i].ba nhao,stud[i].danwei);
}
fclose(fp);
}
else if(it=='n') {printf("取消查询\n");}
else {printf("输入错误!\n");}
printf("输入任意字符结束");
return;
}
///////////////////////////////////////////////
void xiugai() //修改函数
{
int xuehao,i;
FILE *fp;
i=0;
system("cls");
printf("请输入需要修改学生信息的学号:");
scanf("%d",&xuehao);
fp=fopen("stu_kard.txt","r+a");//只读方式打开文本文件
while(!feof(fp)) //循环从文件总读取记录,与输入学号相比,
{
fread(&stud[i],sizeof(struct student),1,fp);
if(xuehao==stud[i].xuehao)
{
printf("%17s %5s %6d %6d %8s\n",stud[i].name,stud[i].sex,stud[i].xuehao,stud[i].ba nhao,stud[i].danwei);
printf("请输入新的学生信息(以空格隔开)\n姓名性别学号班号单位\n");
scanf("%s%s%d%d%s",&stud[i].name,&stud[i].sex,&stud[i].xuehao,&stud[i].banhao ,&stud[i].danwei);
fseek(fp,sizeof(struct student),1);
fwrite(&stud[i],sizeof(struct student),1,fp);
}
break;
}
⑤删除模块用于删除学生的信息。
输入想要删除的学生信息的学号,程序读取stu_kard.txt文件中的信息查找出相应的学生并将其信息删除。
[程序]
void shanchu() //删除函数
{
int xuehao,i;
int j;
FILE *fp;
i=0;
j=0;
system("cls");
printf("请输入需要删除学生信息的学号:");
scanf("%d",&xuehao);
fp=fopen("stu_kard.txt","r+a");
while(!feof(fp)) //循环从文件总读取记录,与输入学号相比,
{
fread(&stud[i],sizeof(struct student),1,fp);
if(xuehao==stud[i].xuehao)//查询到该学生信息后删除该学生信息
{
printf("%17s %5s %6d %6d %8s\n",stud[i].name,stud[i].sex,stud[i].xuehao,stud[i].ba nhao,stud[i].danwei);
stud[i].xuehao=0;
stud[i].banhao=0;
strcpy(stud[i].danwei," ");
strcpy(stud[i].name," ");
strcpy(stud[i].sex," ");
fseek(fp,sizeof(struct student),1);
fwrite(&stud[i],sizeof(struct student),1,fp);
printf("删除成功!");
break;
}
}
fclose(fp);
}
⑥修改模块用于修改学生信息。
输入想要修改的学生学号,程序会读取stu_kard.txt文件中的信息查找出相应的学生显示出来并且可以重新修改其学生信息。
void xiugai() //修改函数
{
int xuehao,i;
FILE *fp;
i=0;
system("cls");
printf("请输入需要修改学生信息的学号:");
scanf("%d",&xuehao);
fp=fopen("stu_kard.txt","r+a");//只读方式打开文本文件
while(!feof(fp)) //循环从文件总读取记录,与输入学号相比,
{
fread(&stud[i],sizeof(struct student),1,fp);
if(xuehao==stud[i].xuehao)
{
printf("%17s %5s %6d %6d %8s\n",stud[i].name,stud[i].sex,stud[i].xuehao,stud[i].ba nhao,stud[i].danwei);
printf("请输入新的学生信息(以空格隔开)\n姓名性别学号班号单位\n");
scanf("%s%s%d%d%s",&stud[i].name,&stud[i].sex,&stud[i].xuehao,&stud[i].banhao ,&stud[i].danwei);
fseek(fp,sizeof(struct student),1);
fwrite(&stud[i],sizeof(struct student),1,fp);
}
break;
}
}
⑦统计模块用于统计所输入的学生信息,统计的信息包括学生总人数,男生、女生人数,并且可以选择是否显示当前所存储的所有学生的信息。
[程序]
void tongji()
{
char chr;
int ren,nan,nv,i;
FILE *fp;
i=0;
ren=0;
nan=nv=0;
system("cls");
printf("\n -----统计学生信息----\n");
printf("是否统计当前录入的学生人数?(yes--y no--n)");
scanf("%s",&chr);
if(chr=='y')
{
fp=fopen("stu_kard.txt","rb");
for(i=0;!feof(fp);i++)
{
fread(&stud[i],sizeof(struct student),1,fp);
if(stud[i].xuehao!=0)
{
ren++;
if(strcmp(stud[i].sex,"男")==0)
nan++;
else if(strcmp(stud[i].sex,"女")==0)
nv++;
}
}
fclose(fp);
printf("当前录入的学生总人数是:");
printf("%6d\n",ren);
printf(" 其中男生人数:");
printf("%6d ",nan);
printf(" 女生人数:");
printf("%6d ",nv);
}
else{printf("取消操作\n");}
/////////////////////////////////////////////////////////////////
printf("\n\n\n是否显示所有录入学生信息?(yes--y no--n)");
scanf("%s",&chr);
if(chr=='y')
{
printf("查询信息如下:姓名性别学号班号单位\n");
fp=fopen("stu_kard.txt","rb");
for(i=0;!feof(fp);i++)
{
fread(&stud[i],sizeof(struct student),1,fp);
if(stud[i].xuehao!=0)
printf("%17s %5s %6d %6d %8s\n",stud[i].name,stud[i].sex,stud[i].xuehao,stud[i].ba nhao,stud[i].danwei);
}
fclose(fp);
}
}
六、调试情况,设计技巧及体会
1、运行该程序,其各个模块的界面图如下:
(1)主菜单函数:
(2)输入模块:
(3)查询学生信息模块:
(4)查询班级信息模块:
(5)修改学生信息模块:
(6)删除模块:
(7)统计模块:
2、对自己设计进行评价
我觉得我的程序比较成功,各个模块在运行中都很正常,基本满足了实习的基本要求,各个模块构成一个功能相对完整的的系统。
3、在设计过程中的感受
对这次实习的最大感受,便是做一个程序应该很细心,因为在编程过程中我很多地方的错误都是不细心,不认真而造成的,但在完成整个程序后,眼看各个功能模块完美的运行
成功,又有一种很强的成就感。
七、源程序清单
#include<iostream.h>
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
#include<conio.h>
#include<string.h>
#define SIZE 5
struct student
{
char name[10];
char sex[4];
int xuehao;
int banhao;
char danwei[10];
}stud[SIZE];
typedef struct {
char name[10];
char sex[4];
int xuehao;
int banhao;
char danwei[10];
}stu;
void main();
void luru();
void chaxunx();
void chaxunb();
void xiugai();
void shanchu();
void tongji();
void main()
{
int n;
system("cls"); //清屏
printf(" 欢迎使用学生证管理系统\n");
printf("***************************1、录入学生信息***********************************\n");
printf("***************************2、查询学生信息***********************************\n");
printf("***************************3、查询班级信息***********************************\n");
printf("***************************4、修改学生信息***********************************\n");
printf("***************************5、删除学生信息***********************************\n");
printf("***************************6、统计学生信息***********************************\n");
printf("***************************7、退出***********************************\n");
printf(" 请输入功能代码:[1-5]");
scanf("%d",&n);
switch(n)
{
case 1:luru();break;
case 2:chaxunx();break;
case 3:chaxunb();break;
case 4:xiugai();break;
case 5:shanchu();break;
case 6:tongji();break;
case 7:exit(1);break;
default:printf("error\n");
}
}
///////////////////////////////////////////////
void luru()
{
int i=0;
FILE *fp;
system("cls");
printf("请输入学生信息(以空格隔开)\n姓名性别学号班号单位\n");
scanf("%s%s%d%d%s",&stud[i].name,&stud[i].sex,&stud[i].xuehao,&stud[i].banhao,&stud[ i].danwei);
fp=fopen("stu_kard.txt","a");//追加方式打开文本文件
if(fp==NULL) //打开失败
{
printf("cannot open file\n");
return;
}
else //打开成功
{
if(fwrite(&stud[i],sizeof(struct student),1,fp)!=1)
printf("file write error\n");
}
fclose(fp); //关闭文件
return;
}
///////////////////////////////////////////////
void chaxunx() //查询学生信息函数
{
int i=0;
char it;
int xuehao;
FILE *fp;
system("cls");
//以下是查询某个学生的个人信息
printf("是要查询学生个人信息吗?yes--y no--n 请输入:");
scanf("%s",&it);
if(it=='y') //输入y 表示要查询学生的个人信息
{
printf("请输入学号:");
scanf("%d",&xuehao);
fp=fopen("stu_kard.txt","r");//只读方式打开文本文件
while(!feof(fp)) //循环从文件总读取记录,与输入学号相比,
{
fread(&stud[i],sizeof(struct student),1,fp);
if(xuehao==stud[i].xuehao)
{
printf("查询信息如下:姓名性别学号班号单位\n");
printf("%17s %5s %6d %6d %8s\n",stud[i].name,stud[i].sex,stud[i].xuehao,stud[i].banhao,stud[i]. danwei);
break; //查询到该学生信息后退出循环
}
}
if(stud[i].xuehao!=xuehao)
printf("查无此人!");
fclose(fp);
}
else if(it=='n') {printf("取消查询\n");}
else {printf("输入错误!\n");}
}
//////////////////////////////////////////////
//以下是查询某个班级的学生信息
void chaxunb() //查询班级信息函数
{
int i;
char it;
int banhao;
FILE *fp;
i=0;
printf("是要查询学生班级信息吗?yes--y no--n 请输入:");
scanf("%s",&it);
if(it=='y') //输入y 表示要查询学生的班级信息
{
printf("请输入班号:");
scanf("%d",&banhao);
fp=fopen("stu_kard.txt","r");
printf("查询信息如下:姓名性别学号班号单位\n");
for(i=0;!feof(fp);i++)//循环从文件总读取记录,与stud[i].banji相比,
{
fread(&stud[i],sizeof(struct student),1,fp);
if(banhao==stud[i].banhao) //如果banji号相同,显示该条记录
printf("%17s %5s %6d %6d %8s\n",stud[i].name,stud[i].sex,stud[i].xuehao,stud[i].banhao,stud[i]. danwei);
}
fclose(fp);
}
else if(it=='n') {printf("取消查询\n");}
else {printf("输入错误!\n");}
printf("输入任意字符结束");
return;
}
///////////////////////////////////////////////
void xiugai() //修改函数
{
int xuehao,i;
FILE *fp;
i=0;
system("cls");
printf("请输入需要修改学生信息的学号:");
scanf("%d",&xuehao);
fp=fopen("stu_kard.txt","r+a");//只读方式打开文本文件
while(!feof(fp)) //循环从文件总读取记录,与输入学号相比,
{
fread(&stud[i],sizeof(struct student),1,fp);
if(xuehao==stud[i].xuehao)
{
printf("%17s %5s %6d %6d %8s\n",stud[i].name,stud[i].sex,stud[i].xuehao,stud[i].banhao,stud[i]. danwei);
printf("请输入新的学生信息(以空格隔开)\n姓名性别学号班号单位\n");
scanf("%s%s%d%d%s",&stud[i].name,&stud[i].sex,&stud[i].xuehao,&stud[i].banhao,&stud[i].da nwei);
fseek(fp,sizeof(struct student),1);
fwrite(&stud[i],sizeof(struct student),1,fp);
}
break;
}
}
///////////////////////////////////////////////
void shanchu() //删除函数
{
int xuehao,i;
int j;
FILE *fp;
i=0;
j=0;
system("cls");
printf("请输入需要删除学生信息的学号:");
scanf("%d",&xuehao);
fp=fopen("stu_kard.txt","r+a");
while(!feof(fp)) //循环从文件总读取记录,与输入学号相比,
{
fread(&stud[i],sizeof(struct student),1,fp);
if(xuehao==stud[i].xuehao)//查询到该学生信息后删除该学生信息
{
printf("%17s %5s %6d %6d %8s\n",stud[i].name,stud[i].sex,stud[i].xuehao,stud[i].banhao,stud[i]. danwei);
stud[i].xuehao=0;
stud[i].banhao=0;
strcpy(stud[i].danwei," ");
strcpy(stud[i].name," ");
strcpy(stud[i].sex," ");
fseek(fp,sizeof(struct student),1);
fwrite(&stud[i],sizeof(struct student),1,fp);
printf("删除成功!");
break;
}
}
fclose(fp);
}
///////////////////////////////////////////////
void tongji()
{
char chr;
int ren,nan,nv,i;
FILE *fp;
i=0;
ren=0;
nan=nv=0;
system("cls");
printf("\n -----统计学生信息----\n");
printf("是否统计当前录入的学生人数?(yes--y no--n)");
scanf("%s",&chr);
if(chr=='y')
{
fp=fopen("stu_kard.txt","rb");
for(i=0;!feof(fp);i++)
{
fread(&stud[i],sizeof(struct student),1,fp);
if(stud[i].xuehao!=0)
{
ren++;
if(strcmp(stud[i].sex,"男")==0)
nan++;
else if(strcmp(stud[i].sex,"女")==0)
nv++;
}
}
fclose(fp);
printf("当前录入的学生总人数是:");
printf("%6d\n",ren);
printf(" 其中男生人数:");
printf("%6d ",nan);
printf(" 女生人数:");
printf("%6d ",nv);
}
else{printf("取消操作\n");}
/////////////////////////////////////////////////////////////////
printf("\n\n\n是否显示所有录入学生信息?(yes--y no--n)");
scanf("%s",&chr);
if(chr=='y')
{
printf("查询信息如下:姓名性别学号班号单位\n");
fp=fopen("stu_kard.txt","rb");
for(i=0;!feof(fp);i++)
{
fread(&stud[i],sizeof(struct student),1,fp);
if(stud[i].xuehao!=0)
printf("%17s %5s %6d %6d %8s\n",stud[i].name,stud[i].sex,stud[i].xuehao,stud[i].banhao,stud[i]. danwei);
}
fclose(fp);
}
}。