资源描述
沈阳航空航天大学
课 程 设 计 报 告
课程设计名称:C语言课程设计
课程设计题目:学生信息管理系统得设计与实现
院(系):计算机学院
专 业:计算机科学与技术
班 级:
学 号:
姓 名:
指导教师:
完成日期:
目 录
第1章 概要设计 1
1、1题目得内容与要求 1
1、2总体结构 1
第2章 详细设计 2
2、1主模块 2
2、2信息录入模块 4
2、3信息插入模块 6
2、4信息查询模块 7
2、5信息浏览模块 7
2、6信息删除模块 8
2、7信息修改模块 9
2、8学生人数统计模块 9
第3章 调试分析 10
第4章 使用说明与执行结果 14
参考文献 19
附 录(程序清单) 20
第1章 概要设计
1、1题目得内容与要求
课程设计得内容就是设计一个简单得单词替换程序,可以替换文本文件中指定得单词。
要求:
(1)输入信息要包括学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。
(2)通过菜单进行信息得录入,查询,修改,删除等等功能。
(3)查询模块要分别用两种方式查询,学号查询,姓名查询。
(4)文件保存到文本中。
(5)采用VC环境进行调试运行。
1、2总体结构
本程序主要分为8个模块(功能模块图见图1、1):
1、主模块,主要显示系统菜单,并且读取所选功能选项。
2、信息录入模块,对学生信息进行录入。
3、信息插入模块,从所有数据中得任一位置插入学生得信息。
4、信息查询模块,对学生得信息进行查询,分两种方式:学号查询,姓名查询。
5、信息浏览模块,将所有学生得信息逐个显示出。
6、信息删除模块,将指定信息删除。
7、信息修改模块,修改指定信息。
8、学生人数统计模块,统计当前所存储得数据条数。
图1、1 功能模块图
第2章 详细设计
2、1主模块
控制整个程序得运行,控制菜单操作,通过主函数模块分别调用各个模块,实现各项功能,主要应用循环与switch语句,流程如图2、1所示。
图2、1 主模块流程图
注释:本流程图主要实现了一个switch语句,合法数据域为0~7,输入0则退出,在流程图上没有0就是因为数值合法且数值不为1~7得时候即为0。
2、2学生信息录入模块(input函数)
输入要输入得学生信息,可以显示已保存得学生信息内容,并将内容输出,若内容为空,将提示就是否录入数据,直到选择不继续,就回到主菜单,主要流程如图2、2所示。
注释:
1. 学号为字符串
2. 直到输入不继续才会结束。
3. 结束为回主菜单,而不就是结束程序
图2、2 显示模块流程图
2、3信息插入模块
插入新信息,主要将信息插入任意处,其余信息依次下移一条。不能覆盖某一条信息,而就是顺序下移。主要流程如图2、3所示。
图2、3信息插入模块流程图
注释:
1、检测重复时会将所输入得学号跳过,对之前存在数据进行检测。
2、若没有数据,则会显示无数据并直接退回到主菜单。
2、4信息查询模块
本模块分为两种查询方式,实际上操作方式就是相同得,姓名与学号均为字符串形式,主要流程如图2、4所示。
图2、4 信息查询模块流程图
注释:
1、学号与学生姓名均为字符串
2、程序中会显示选项,流程图中没有表示。
2、5信息浏览模块
可以将所有已保存信息信息显示到屏幕上,计划就是将其作为一个单独函数,然后突然发现该模块可以与信息插入模块联系到一起,并且可以更好地实现两个模块得功能,如果没有数据,则调用信息录入模块录入新信息,若有数据则直接显示出来,主要就是将文件中得内容读取到屏幕上。并且在信息录入时可以显示出已有信息。
2、6信息删除模块
可以删除指定学生得信息,通过学号查找来查找删除目标,在打开文件后会判定就是否有数据,可以在删除时确定就是否删除。主要流程如图2、5所示。
图2、5 信息删除模块流程图
注释:
1、删除后被删除项之后得数据依次向上移动
2、数据总个数会减一
2、7信息修改模块
可以修改指定学生得信息,通过学号查找来查找修改目标,在打开文件后会判定就是否有数据,可以在修改时确定就是否修改。主要流程如图2、6所示。
图2、6 信息修改模块统计图
注释:
1、修改时其余数据不会变化
2、8学生人数统计模块
统计数据条数,即学生人数,主要就就是应用每条数据所占总长度就是固定得,检测共有多少条。
第3章 调试分析
1、对主函数进行调试
图为菜单
2、第一次数据录入
3、第二次录入出现问题
图中上部表头不能对齐,通过一次次对show函数中显示内容进行修改,最终正确对齐。
已改正
4. 对信息浏览模块得检测
出现问题,出现多余信息。
改正后测试时屏幕一闪而过,但已观测到问题已改正。
5. 删除模块出现问题
删除前:
删除:
删除后:
错误得删除了内容。
经仔细查瞧代码发现将学号得形式错误得定义成整形,已改正,图为改正结果,删除功能完全正常,如下图。
第4章 使用说明与执行结果
运行操作及结果:
主界面,输入数字进行操作。
输入1 并选择录入新信息,即输入y。
输入学生得个人信息即可。
输入完成,可以选择继续输入或退出。
选择 n 即回到主菜单界面。
输入2 进入信息插入系统,
输入插入位置。
输入插入得信息
插入成功,按任意键返回主菜单。
输入3 进入查询系统
可以分别进行学号查找与姓名查找
学号查找
姓名查找
输入4 进入学生信息浏览系统,将显示所有已录入学生信息
按任意键返回主菜单
输入5进入学生信息删除界面
通过学号查找方式进行删除
删除后可以输入4 确认就是否删除
输入 6 可以进入信息修改界面
查找方式为学号查找
修改完成。
输入7 会统计保存得数据有多少条。
输入0 退出系统
参考文献
[1] Ivor Horton 、 C语言入门经典(第五版) 、 清华大学出版社,2013
[2] 刘艳伟、 C函数全能速查宝典 、 人民邮电出版社,2012
[3] 戴艳 、 零基础学算法(第三版) 、 机械工业出版社,2014
[4] 郭旭文 、 C语言程序设计与项目实践 、 电子工业出版社,2011
[5] 王敬华 、 C语言程序设计教程(第二版) 、 清华大学出版社,2009
附 录(程序清单)
程序源代码:
#include<stdio、h>
#include<stdlib、h>
#include<string、h>
#define LEN sizeof(struct student)
#define FORMAT "%-15s%-10s%-6d%-7s%-13s%-16s%-12s\n"
#define ALL stu[i]、num,stu[i]、name,stu[i]、age,stu[i]、sex,stu[i]、birth,stu[i]、address,stu[i]、tel
struct student//定义学生成绩结构体
{
char num[15];//学号
char name[10];//姓名
int age;//年龄
char sex[7];//性别
char birth[13];//出生年月
char address[16];//地址
char tel[12];//电话
};
struct student stu[50];
void input();//学生信息录入系统
void show();//学生信息浏览系统
void insert();//学生信息插入系统
void search();//学生信息查询系统
void del();//学生信息删除系统
void modify();//学生信息修改系统
void all();//学生人数统计模块
int main()
{
int num=0;
while(1)
{
//系统菜单界面
printf("\t|---------------学生信息管理系统---------------|\n");
printf("\t| 0、退出 |\n");
printf("\t| 1、学生信息录入 |\n");
printf("\t| 2、学生信息插入 |\n");
printf("\t| 3、学生信息查询 |\n");
printf("\t| 4、学生信息浏览 |\n");
printf("\t| 5、学生信息删除 |\n");
printf("\t| 6、学生信息修改 |\n");
printf("\t| 7、学生人数统计 |\n");
printf("\t|----------------------------------------------|\n");
printf("\t请输入数字0~7:");
scanf("%d",&num);
while(num>7||num<0)//判断输入就是否合理
{
printf("\t输入错误,请重新输入:");
scanf("%d",&num);
}
switch(num)
{
case 1:
input();
system("cls");//清屏
break;
case 2:
insert();
system("pause");
system("cls");
break;
case 3:
search();
system("pause");
system("cls");
break;
case 4:
show();
system("cls");//清屏
break;
case 5:
del();
system("pause");
system("cls");
break;
case 6:
modify();
system("pause");
system("cls");
break;
case 7:
all();
system("pause");
system("cls");
break;
case 0:
printf("\t退出系统\n");
return 0;
}
}
}
void input()//学生信息录入系统
{
int i,m=0;//m就是记录得条数
char ch[2];
FILE *fp;
if((fp=fopen("data、txt","a+"))==NULL)//打开指定文件
{
printf("文件无法打开\n");
return;
}
while(!feof(fp))
{
if(fread(&stu[m] ,LEN,1,fp)==1)
m++;//统计当前记录条数
}
fclose(fp);
if(m==0)
printf("没有数据\n");
else
{
system("cls");//清屏
show();//显示原有信息
}
if((fp=fopen("data、txt","wb"))==NULL)
{
printf("文件无法打开\n");
return;
}
for(i=0;i<m;i++)
fwrite(&stu[i] ,LEN,1,fp);//向指定得文件写入信息
printf("就是否录入新信息(就是:y/否:n):");
scanf("%s",ch);
while(strcmp(ch,"y")==0)//判断就是否要录入新信息
{
printf("学号:");
scanf("%s",&stu[m]、num);//输入学生学号
for(i=0;i<m;i++)
if(strcmp(stu[i]、num,stu[m]、num)==0)
{
printf("该学号已存在,请按任意键继续!\n");
getch();
fclose(fp);
return;
}
printf("姓名:");
scanf("%s",stu[m]、name);//输入学生姓名
printf("年龄:");
scanf("%d",&stu[m]、age);//输入年龄
printf("性别:");
scanf("%s",&stu[m]、sex);//输入性别
printf("出生年月:");
scanf("%s",&stu[m]、birth);//输入出生年月
printf("地址:");
scanf("%s",&stu[m]、address);//输入地址
printf("电话:");
scanf("%s",&stu[m]、tel);//输入电话
if(fwrite(&stu[m],LEN,1,fp)!=1)//将新录入得信息写入指定得磁盘文件
{
printf("无法保存");
getch();
}
else
{
printf("%s 已保存\n",stu[m]、name);
m++;
}
printf("就是否继续(就是:y/否:n):");//询问就是否继续
scanf("%s",ch);
}
fclose(fp);
printf("\t完成\n");
}
void show()//学生信息浏览系统
{
FILE *fp;
int i,m=0;
fp=fopen("data、txt","rb");
while(!feof(fp))
{
if(fread(&stu[m] ,LEN,1,fp)==1)
m++;
}
if(m==0)
{
input();
return;
}
fclose(fp);
printf("学号 姓名 年龄 性别 出生年月 地址 电话\t\n");
for(i=0;i<m;i++)
{
printf(FORMAT,ALL);//将信息按指定格式打印
}
system("pause");
}
void insert()//学生信息插入系统
{
FILE *fp;
int i,j,k,m=0;
char snum[15];
if((fp=fopen("data、txt","r+"))==NULL)
{
printf("无法打开\n");
return;
}
while(!feof(fp))
if(fread(&stu[m],LEN,1,fp)==1)
m++;
if(m==0)
{
printf("没有数据\n");
fclose(fp);
return;
}
printf("请输入插入得位置\n");
scanf("%s",&snum);//输入要插入得位置
for(i=0;i<m;i++)
if(strcmp(snum,stu[i]、num)==0)
break;
for(j=m-1;j>i;j--)
stu[j+1]=stu[j];//从最后一条记录开始均向后移一位
printf("请输入插入得学号\n");
printf("学号:");
scanf("%s",&stu[i+1]、num);
for(k=0;k<m;k++)
{
if(k==(i+1))
continue;
if(strcmp(stu[k]、num,stu[i+1]、num)==0)
{
printf("该学生已存在\n");
getch();
fclose(fp);
return;
}
}
printf("姓名:");
scanf("%s",stu[i+1]、name);//输入学生姓名
printf("年龄:");
scanf("%d",&stu[i+1]、age);//输入年龄
printf("性别:");
scanf("%s",&stu[i+1]、sex);//输入性别
printf("出生年月:");
scanf("%s",&stu[i+1]、birth);//输入出生年月
printf("地址:");
scanf("%s",&stu[i+1]、address);//输入地址
printf("电话:");
scanf("%s",&stu[i+1]、tel);//输入电话
if((fp=fopen("data、txt","wb"))==NULL)
{
printf("无法打开\n");
return;
}
for(k=0;k<=m;k++)
if(fwrite(&stu[k] ,LEN,1,fp)!=1)//将修改后得记录写入磁盘文件中
{
printf("无法保存");
getch();
}
fclose(fp);
}
void search()//学生信息查询系统
{
FILE *fp;
int i,m=0,sear;
char ch[2];
char snum[15];
char sname[10];
if((fp=fopen("data、txt","rb"))==NULL)
{
printf("文件无法打开\n");
return;
}
while(!feof(fp))
if(fread(&stu[m],LEN,1,fp)==1)
m++;
fclose(fp);
if(m==0)
{
printf("没有数据\n");
return;
}
printf("\t1、学号查找\n");
printf("\t2、姓名查找\n");
printf("\t请选择查找方式:");
scanf("%d",&sear);
if(sear==1)
{
printf("请输入学号\n");
scanf("%s",&snum);
for(i=0;i<m;i++)
if(strcmp(snum,stu[i]、num)==0)//查找输入得学号就是否在记录中
{
printf("发现该同学信息,就是否显示(就是:y/否:n):");
scanf("%s",ch);
if(strcmp(ch,"y")==0)
{
printf("学号 姓名 年龄 性别 出生年月 地址 电话\t\n");
printf(FORMAT,ALL);//将查找出得结果按指定格式输出
break;
}
else
return;
}
if(i==m)
printf("没有找到该学生\n");//未找到要查找得信息
}
else if(sear==2)
{
printf("请输入姓名\n");
scanf("%s",&sname);
for(i=0;i<m;i++)
if(strcmp(sname,stu[i]、name)==0)//查找输入得学号就是否在记录中
{
printf("发现该同学信息,就是否显示(就是:y/否:n):");
scanf("%s",ch);
if(strcmp(ch,"y")==0)
{
printf("学号 姓名 年龄 性别 出生年月 地址 电话\t\n");
printf(FORMAT,ALL);//将查找出得结果按指定格式输出
break;
}
else
return;
}
if(i==m)
printf("没有找到该学生\n");//未找到要查找得信息
}
else
printf("输入错误\n");
}
void del()//学生信息删除系统
{
FILE *fp;
int i,j,m=0;
char snum[15];
char ch[2];
if((fp=fopen("data、txt","r+"))==NULL)
{
printf("无法打开\n");
return;
}
while(!feof(fp))
if(fread(&stu[m],LEN,1,fp)==1)
m++;
fclose(fp);
if(m==0)
{
printf("没有数据\n");
return;
}
printf("请输入学号:");
scanf("%s",&snum);
for(i=0;i<m;i++)
if(strcmp(snum,stu[i]、num)==0)
break;
if(i==m)
{
printf("无此学生信息\n");
return;
}
printf("发现该学生信息,就是否删除(就是:y/否:n):");
scanf("%s",ch);
if(strcmp(ch,"y")==0)//判断就是否要进行删除
{
for(j=i;j<m;j++)
stu[j]=stu[j+1];//将后一个记录移到前一个记录得位置
m--;//记录得总个数减1
if((fp=fopen("data、txt","wb"))==NULL)
{
printf("无法打开\n");
return;
}
for(j=0;j<m;j++)//将更改后得记录重新写入指定得磁盘文件中
if(fwrite(&stu[j] ,LEN,1,fp)!=1)
{
printf("无法保存\n");
getch();
}
fclose(fp);
printf("删除成功\n");
}
else
return;
}
void modify()//学生信息修改系统
{
FILE *fp;
int i,j,m=0;
char ch[2];
char snum[15];
if((fp=fopen("data、txt","r+"))==NULL)
{
printf("无法打开\n");
return;
}
while(!feof(fp))
if(fread(&stu[m],LEN,1,fp)==1)
m++;
if(m==0)
{
printf("没有数据\n");
fclose(fp);
return;
}
printf("请输入要修改得信息得学生学号\n");
scanf("%s",&snum);
for(i=0;i<m;i++)
if(strcmp(snum,stu[i]、num)==0)//检索记录中就是否有要修改得信息
break;
if(i==m)
{
printf("无此学生信息\n");
return;
}
printf("发现该学生,就是否修改(就是y/否n):\n");
scanf("%s",ch);
if(strcmp(ch,"y")==0)//判断就是否要进行删除
{
printf("姓名:");
scanf("%s",stu[i]、name);//输入学生姓名
printf("年龄:");
scanf("%d",&stu[i]、age);//输入年龄
printf("性别:");
scanf("%s",&stu[i]、sex);//输入性别
printf("出生年月:");
scanf("%s",&stu[i]、birth);//输入出生年月
printf("地址:");
scanf("%s",&stu[i]、address);//输入地址
printf("电话:");
scanf("%s",&stu[i]、tel);//输入电话
}
else
return;
if((fp=fopen("data、txt","wb"))==NULL)
{
printf("无法打开\n");
return;
}
for(j=0;j<m;j++)//将新修改得信息写入指定得磁盘文件中
if(fwrite(&stu[j] ,LEN,1,fp)!=1)
{
printf("无法保存");
getch();
}
printf("修改成功");
fclose(fp);
}
void all()//学生人数统计模块
{
FILE *fp;
int m=0;
if((fp=fopen("data、txt","r+"))==NULL)
{
printf("无法打开\n");
return;
}
while(!feof(fp))
if(fread(&stu[m],LEN,1,fp)==1)
m++;
if(m==0)
{
printf("没有数据\n");
fclose(fp);
return;
}
else
printf("共有%d条数据",m);
fclose(fp);
}
课程设计总结:
这个程序严格来说有很多不足之处,漏洞比较多,这样得程序并不适合面向人们,也不适合人们得使用,我希望我得程序做出来之后可以满足我们生活中得某些需求,而这个程序显然不就是,至少现在不能,我会逐渐完善这个程序,使它适合使用。
在做这个信息管理系统时我发现,程序并不就是要一次将其做到完美得,当然也很难一次做到完美,就是要一次次得改进,让程序越来越接近完美,当然程序做到完美就是很难得,但我希望我能将我得程序做到最完美,我也会逐渐得完善我得程序,我相信很多人都会有这种想法。
平时要多读一些计算机方面得书籍,要积累一些算法,这样才不会在做程序得时候卡住,还真就是书到用时方恨少。在写程序得时候,程序尽量要规范,这样在发生错误时可以方便于检查,也方便于其她人对您得程序得读取
指导教师评语:
指导教师(签字): 年 月 日
课程设计成绩
展开阅读全文