C语言课程设计代码.docx
《C语言课程设计代码.docx》由会员分享,可在线阅读,更多相关《C语言课程设计代码.docx(33页珍藏版)》请在冰豆网上搜索。
C语言课程设计代码
课程设计
课程名称C语言程序设计课程设计
题目名称学生信息管理系统
学生学院经济管理学院
专业班级08信管1班
学号**********
学生姓名李嘉宁
指导教师黄跃梅
2009年6月15日
一、课程简介
二、系统功能分析
三、系统设计
四、系统实现
五、总结
一、课程简介
1、课程设计的内容
学生信息包括:
学号、姓名、年龄、性别、出生年月、地址、邮编、电话、E-mail等。
设计一学生信息管理系统,使之能提供以下功能:
学生信息录入功能(录入时可考虑对录入信息是否正确进行判断,学生信息用文件保存),学生信息浏览功能,查询(按学号、姓名查询),排序功能(按学号、姓名),学生信息的删除与修改。
要求系统界面友好,使用方便。
2、课程设计的要求与数据
1.开发环境要求:
TurboC3.0。
2.提交课程设计报告一份,包括以下内容:
(1)系统分析:
包括设计题目、设计内容以及系统功能需求分析;
(2)系统设计:
包括总体设计(主要功能模块的划分)及详细设计(各功能模块的算法设计以及对应的流程图);
(3)系统实现:
包括使用的所有变量、自定义函数、结构体的说明,以及完整源程序清单,关键代码应加注释。
(4)系统运行:
包括系统操作使用的简单说明,使用测试数据运行的结果。
(5)总结。
包括课程设计过程中的学习体会与收获,出现的问题和解决的方法,没有完成的部分及原因,对C语言和本次课程设计的认识以及自己的建议等内容。
3.提交光盘(每班统一制作1张光盘,每人一个文件夹,文件夹名为“学号姓名”)。
每人的光盘文件夹内含:
(1)任务书;
(2)源程序文件和可执行程序文件;
(3)测试用例和编译运行结果;
(4)课程设计报告电子文档。
3、课程设计应完成的工作
1.进行需求分析,将系统划分为多个模块;
2.为每个模块设计算法及流程;
3.编写代码实现各模块功能;
4.运行调试程序;
5.撰写课程设计报告。
4、应收集的资料及主要参考文献
[1]谭浩强,《C程序设计(第三版)》,清华大学出版社,2005
[2]谭浩强,《C程序设计题解与上机指导(第三版)》,清华大学出版社,2005
教材第11章“结构体”部分及有关习题。
二、系统功能分析
1.设计题目:
学生信息管理系统
2.设计内容:
3.系统功能需求分析:
系统所具备功能:
1.建立学生信息文件,并可进行:
(1)学生学号、姓名、年龄、性别、出生年月、地址、邮编、电话、E-mail等信息的输入。
(2)对指定学生信息进行修改,删除。
(3)对指定(按学号或姓名)学生进行信息查询。
(4)按学号顺序显示所有学生信息。
(5)保存信息。
三、系统设计
1.总体设计
主要功能模块:
(1)开始界面选择,初始菜单,二级菜单。
(选择结构)
(2)数据文件的打开与关闭。
(fopen,fclose,save等)
(3)学生信息输入。
(结构体,结构体数组指针,信息校正,数据保存)
(3)信息修改、删除。
(数据的读写,fread,fwrite,链表等)
(4)学生信息查询。
(结构体,循环结构,选择结构)
(5)保存信息。
2.详细设计
(1)界面
初始菜单界面
*********欢迎使用学生信息管理系统********
请选择:
1.学生信息添加
2.修改或删除学生信息
3.学生信息查询
4.退出
*********欢迎使用学生信息管理系统********
二级菜单
********学生信息的更改*******
1.学生信息的删除
2.学生信息的修改
0.返回主菜单
请选择(0-2)
********学生信息删除********
1.按编号删除
2.按姓名删除
0.返回主菜单
请选择(0-2)
********学生信息查询********
1.按学号进行信息查询
2.按姓名进行信息查询
0.返回主菜单
请选择(0-2)
三级菜单
********修改学生信息********
1.修改学号
2.修改年龄
3.修改性别
4.修改出生年月
5.修改地址
6.修改电话
7.修改email
8.修改邮编
0.返回上级菜单
(2)数据结构设计
structstudent
{
intnum;
charname[20];
intage;
charsex[5];
charbirthday[10];
charadr[20];
charmailbox[10];
chartel[10];
charemail[20];
}student[N],student2[N];
(3)函数模块设计
Save函数
intsave(intsum)
{
FILE*fp;
inti;
if((fp=fopen("student.txt","wt"))==NULL)
{
printf("读文件错误!
\n");
return0;
}
for(i=0;iif(fwrite(&student[i],sizeof(structstudent),1,fp)!
=1)
printf("写文件错误!
\n");
fclose(fp);
returni;
}
用于学生信息的存储。
函数输入――intinput()
列出所需输入的数据类型,并且调用Save函数,生成新的信息文件。
文件读取――intload_file()
在程序开头时即调用,检查是否已经存在信息文件,并告知用户文件内信息。
按照编号查询信息――intsearch_by_num()
在二级菜单中发挥作用,以学号为标准进行信息查询。
for(i=0;i{
if(num==student[i].num&&student[i].num!
=0)
{
PRINT;
printf("%s%d%d%s%s%s%s%s%s",student[i].name,student[i].num,student[i].age,student[i].birthday,student[i].adr,student[i].mailbox,student[i].tel,student[i].email);
}
按姓名进行查询――intsearch_by_name()
for(i=0;i{
if(strcmp(student[i].name,name)==0&&student[i].num!
=0)
{
printf("学生%s的信息",student[i].name);
PRINT;
printf("%s%d%d%s%s%s%s%s%s",student[i].name,student[i].num,student[i].age,student[i].birthday,student[i].adr,student[i].mailbox,student[i].tel,student[i].email);
}
以姓名和学号为标准,进行学生信息排列
for(i=0;i{
if(strcmp(student[i].name,name)==0&&student[i].num!
=0)
{
printf("学生%s的信息",student[i].name);
PRINT;
printf("%s%d%d%s%s%s%s%s%s",student[i].name,student[i].num,student[i].age,student[i].birthday,student[i].adr,student[i].mailbox,student[i].tel,student[i].email);
学生信息按学号删除
intdelete_by_num()
{
intdelete_num=0,i,f=0;
printf("\n\n请输入您要删除学生的学号:
");
scanf("%d",delete_num);
for(i=0;i{
if(student[i].num==delete_num)
{
student[i].num=0;
printf("该学生信息已删除!
");
学生信息按姓名删除
intdelete_by_name()
{
chardelete_name[20],i,f=0;
printf("\n\n请输入要删除学生的姓名:
");
scanf("%s",&delete_name);
for(i=0;i{
if(strcmp(student[i].name,delete_name)==0)
{tudent[i].num=0;
printf("%s的信息已删除!
",student[i].name);
学生信息修改,通过switch语句对需要指定的信息进行修改。
四、系统实现
打开程序检测是否已存在学生信息文件:
初始菜单:
学生信息添加菜单:
二级菜单:
源代码:
/*学生信息管理系统*/
#include
#include
#include
#defineN100
#definePRINTprintf("姓名学号年龄出生年月地址邮编电话E-mail\n");
intsum=0;
structstudent
{
intnum;
charname[20];
intage;
charsex[5];
charbirthday[10];
charadr[20];
charmailbox[10];
chartel[10];
charemail[20];
}student[N],student2[N];
/*保存信息*/
intsave(intsum)
{
FILE*fp;
inti;
if((fp=fopen("student.txt","wt"))==NULL)
{
printf("读文件错误!
\n");
return0;
}
for(i=0;iif(fwrite(&student[i],sizeof(structstudent),1,fp)!
=1)
printf("写文件错误!
\n");
fclose(fp);
returni;
}
voidclear()
{
getchar();
system("cls");
}
intinput()
{
inti,j,flag=1;
clear();
printf("添加学生信息,当输入学号为0时,将结束操作。
\n");
printf("输入例子:
\n");
printf("学号:
1\n");
printf("姓名:
ZhangFei\n");
printf("年龄:
18\n");
printf("性别:
M\n");
printf("出生年月:
19891007\n");
printf("地址:
Tianhe\n");
printf("邮编:
510000\n");
printf("电话:
12345678\n");
printf("E-mail:
\n");
for(i=1;i{
printf("第%d个学生",i);
printf("学号:
");
scanf("%d",&student[i].num);
if(student[i].num==0)break;
for(j=0;j{
if(student[j].num==student[i].num)
{
printf("学号重复,请重新输入学号:
\n");
flag=0;
break;
}
};
if(flag==0)break;
printf("姓名:
");
scanf("%s",student[i].name);
printf("年龄:
");
scanf("%d",&student[i].age);
printf("性别:
");
scanf("%s",student[i].sex);
printf("出生年月:
");
scanf("%s",student[i].birthday);
printf("地址:
");
scanf("%s",student[i].adr);
printf("邮编:
");
scanf("%s",student[i].mailbox);
printf("电话:
");
scanf("%s",student[i].tel);
printf("E-mail:
");
scanf("%s",student[i].email);
flag=1;
}
if(flag==1)
{
printf("你所输入的学生信息已添加成功!
\n");
printf("按回车键返回主菜单!
\n");
}
getchar();
sum=i;
save(sum);
returni;}
/*读取信息*/
intload_file()
{
FILE*fp;
inti=0;
if((fp=fopen("student.txt","rt"))==NULL)
{
printf("尚未发现已经保存的学生信息!
");
return0;
}
while(feof(fp)!
=1)
{
fread(&student[i],sizeof(structstudent),1,fp);
if(student[i].num==0)
break;
else
{
i++;
sum++;
}
}
printf("已有学生信息\n");
PRINT;
for(i=0;i{
if(student[i].num!
=0)
printf("%s%d%d%s%s%s%s%s%s",student[i].name,student[i].num,student[i].age,student[i].birthday,student[i].adr,student[i].mailbox,student[i].tel,student[i].email);
}
printf("按回车键返回主菜单!
");
fclose(fp);
return(i);
}
/*输出信息*/
intoutput_message()
{
inti=0;
clear();
printf("\n\n----------------------------学生信息表--------------------------\n");
PRINT;
for(i=0;i{
if(student[i].num!
=0)
printf("%s%d%d%s%s%s%s%s%s",student[i].name,student[i].num,student[i].age,student[i].birthday,student[i].adr,student[i].mailbox,student[i].tel,student[i].email);
}
printf("按回车键返回主菜单!
");
return0;
}
/*按编号查询*/
intsearch_by_num()
{
inti,j=0;
intnum;
clear();
printf("请输入要查询学生的编号:
");
scanf("%s",&num);
for(i=0;i{
if(num==student[i].num&&student[i].num!
=0)
{
printf("编号为%d的学生信息",student[i].num);
PRINT;
printf("%s%d%d%s%s%s%s%s%s",student[i].name,student[i].num,student[i].age,student[i].birthday,student[i].adr,student[i].mailbox,student[i].tel,student[i].email);
}
elsej++;
}
if(j==sum)
printf("编号为%d的学生不存在!
",num);
printf("\n该生信息不存在!
");
getchar();
return0;
}
/*按姓名查询*/
intsearch_by_name()
{
inti,j=0;
charname[20];
clear();
printf("请输入要查询学生的姓名:
");
scanf("%s",name);
for(i=0;i{
if(strcmp(student[i].name,name)==0&&student[i].num!
=0)
{
printf("学生%s的信息",student[i].name);
PRINT;
printf("%s%d%d%s%s%s%s%s%s",student[i].name,student[i].num,student[i].age,student[i].birthday,student[i].adr,student[i].mailbox,student[i].tel,student[i].email);
}
elsej++;
}
if(j==sum)
printf("该学生不存在!
");
printf("按回车键返回上级菜单!
");
getchar();
return0;
}
/*学生信息查询模块*/
inquire_message()
{
intchoice;
do
{
clear();
printf("\n\n\n*****学生信息查询*****\n\n");
printf("1.按学号查询;\n\n\n");
printf("2.按姓名查询;\n\n\n");
printf("0.返回主菜单;\n\n\n");
printf("请选择(0-2):
");
scanf("%d",&choice);
switch(choice)
{
case1:
search_by_num();break;
case2:
search_by_name();break;
case0:
break;
}
}while(choice!
=0);
return1;
}
/*两种排序方式*/
/*按编号排序*/
sort_by_num()
{inti;
PRINT;
for(i=0;i{
printf("%s%d%d%s%s%s%s%s%s",student[i].name,student[i].num,student[i].age,student[i].birthday,student[i].adr,student[i].mailbox,student[i].tel,student[i].email);}
printf("按回车键返回上级菜单!
");
getchar();
return0;
}
sort_by_name()
{
inti,j=0;
charname[20];
clear();
printf("请输入要查询学生的姓名:
");
scanf("%s",name);
for(i=0;i{
if(strcmp(student[i].name,name)==0&&student[i].num!
=0)
{
printf("学生%s的信息",student[i].name);
PRINT;
printf("%s%d%d%s%s%s%s%s%s",student[i].name,student[i].num,student[i].age,student[i].birthday,student[i].adr,student[i].mailbox,student[i].tel,student[i].email);
}
elsej++;
}
if(j==sum)
printf("该学生不存在!
");
printf("按回车键返回上级菜单!
");
getchar();
return0;
}
/*排序模块*/
sort_message()
{
intchoice;
do
{
clear();
printf("\n\n\n*****学生信息排序*****\n\n");
printf("1.按学号进行信息查询\n\n");
printf("2.按姓名进行信息查询\n\n");
printf("0.返回主菜单\n\n");
printf("请选择(0-2):
");
scanf("%d",&choice);
switch(choice)
{
case1:
sort_by_num();break;
case2:
sort_by_name();break;
case0:
break;
}
}while(choice!
=0);
return1;
}
voidrange()
{
inti,j=0,k=0;
for(i=0;i{
if(student[i].num!
=0)
{
student2[j]=student[i];
j++;
}
elsek++;
}
sum-=k;
if(k!
=0)
{
for(i=0;i{
student[i]=student2[i];
}
}
}
/*按编号删除*/
intdelete_by_num()
{
intdelete_num=0,i,f=0;
printf("\n\n请输入您要删除学生的学号:
");
scanf("%d",delete_num);
for(i=0;i{
if(student[i].num==delete_num)
{
student[i].num=0;