C语言课程设计学生信息管理系统设计报告Word下载.docx
《C语言课程设计学生信息管理系统设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《C语言课程设计学生信息管理系统设计报告Word下载.docx(19页珍藏版)》请在冰豆网上搜索。
对数据进行保存,用save函数向文件中写入数据实现该功能。
7、退出程序
五、调试方法以及测试过程中的问题及解决方法
调试方法:
逐条的对程序中的错误进行修改;
修改程序中的变量、声明新函数以及声明头文件对函数进行调试。
测试过程中遇到的问题:
1、删除学生信息功能不能实现。
问题描述:
在选择删除功能后不能把选择的学生信息删除,而总是删除其他学生的信息。
解决办法:
出现这个问题肯定是数据覆盖的时候出现了错误,也就是循环出现了错误。
检查循环程序后发现,循环体内数据交换出现了错误,没有定义结构体变量。
重新定义结构体变量后问题解决了。
2、显示结果时候出错
每一个功能在现实结果现实的信息部完整,部分信息部能现实或被覆盖。
现实出错也就是printf语句中的结构没有排列好所导致的。
检查所有的Printf语句后发现所有的printf语句中少输出了以个语文成绩,且它们不能完全对齐。
在增加了“语文”,修改了转义字符以及空格后,问题解决了。
3、在查询信息的时候出错
在输入不在文件中保存的姓名、学号时,没有信息提示。
出现此问题说明if语句后少了一条else语句,加上该语句后,显示的结果正确了。
4、打开文件出错
当显示保存成功后关闭程序。
重新打开程序选择打开文件后,文件不能正常打开,或打开文件后没有显示结果。
查看文件文件中有数据,说明文件在保存的是后没有出错。
再仔细观察运行结果后,发现该函数在执行到循环输出的时候把该循环跳了过去没有执行。
出现此问题是因为循环的终止条件改变了。
将openl函数该为有返回值函数之后,重新定义了一个see函数来调用openl函数,并在see函数中用循环输出已经打开的文件中的数据。
重新定义一个函数后保存的文件可以成功的打开。
5、在排序后没有保存文件
在order函数后边加上了
printf("
是否保存?
(yorn)"
);
getchar();
scanf("
%c"
&
a);
if(a=='
y'
)
save();
else
printf("
退出"
语句后可以选择是否保存排序后的文件。
六、设计心得
通过一个星期的课程设计,我更深刻的了解了C语言中每个函数的含义,领会了算法是C语言的灵魂这句话的真谛。
一个好的算法可以使程序简洁,运行速度更快。
同时也对C语言中的循环,函数的调用有了更深的理解。
虽然这次的课程设计,老师已经给出了程序让我们改错。
看起来比较容易,但是要让程序实现要求的几个功能却不是很容易。
而且要看懂每一个函数也不是十分的容易。
在修改程序的过程中也收获了很多以前忽略的东西。
在修改的过程中巩固了基础,认识了自已以前常犯得错误,也发现了自己的不足之处。
在程序编写中,我认识编写一个系统不仅仅要有良好的用户界面,良好的程序编写风格也是相当重要的。
只有良好的种程序编写风格,程序代码的可读性才会好,开发的复杂度才能大大减少,检查错误、修改代码时才会更加容易下手。
通过实际操作,学会C语言程序编程的基本步骤、基本方法,开发了自己的逻辑思维能力,培养了分析问题、解决问题的能力。
深刻体会到了团队协作的重要性。
七、程序代码
#include"
stdio.h"
conio.h"
string.h"
stdlib.h"
voidlook();
/*声明查看函数*/
voidsave();
/*声明保存函数*/
voidsearch_name();
/*声明按姓名查看函数*/
voidsearch_number();
/*声明按学号查看函数*/
voidorder();
/*声明排序函数*/
voiddel();
/*声明删除函数*/
intopenl();
/*声明打开函数*/
voidwelcome();
/*声明我的个人信息函数*/
voidtype();
/*声明输入函数*/
voidsee();
/*声明打开并查看文件函数*/
structstudent/*定义学生信息的结构体类型*/
{
charnum[15];
/*学号*/
charname[20];
/*姓名*/
charsex[4];
/*性别*/
intenglish;
/*英语成绩*/
intmath;
/*数学成绩*/
intchinese;
/*语文成绩*/
floataver;
/*平均成绩*/
floatsum;
/*总成绩*/
}stu[100];
intn;
/*声明一个全局变量*/
voidmain()/*主函数即用户的操作界面*/
{
system("
color1E"
/*设计文本颜色*/
intb,flag=0;
/*声明局部变量*/
while
(1)/*循环输出以下信息*/
{
printf("
\n\t\t\t欢迎来到学生成绩管理系统!
\n"
\n\t\t\t\t郗绿阳制作\n"
\t\t\t-------------------------------\n"
\t\t\t1.键入学生的信息\n\n"
/*键入学生的信息*/
\t\t\t2.查看录入的学生信息\n\n"
/*查看录入的学生信息*/
\t\t\t3.按姓名查看学生的信息\n\n"
/*按姓名查看学生的信息*/
\t\t\t4.按学号查看学生的信息\n\n"
/*按学号查看学生的信息*/
\t\t\t5.按平均成绩排序\n\n"
/*排序*/
\t\t\t6.删除学生信息\n\n"
/*删除学生信息*/
\t\t\t7.保存学生信息\n\n"
/*保存*/
\t\t\t8.打开文件\n\n"
/*打开文件*/
\t\t\t9.我的个人信息\n\n"
/*我的个人信息*/
\t\t\t0.退出\n\n"
/*退出*/
\t\t\t请输入你的选择:
"
scanf("
%d"
b);
switch(b)
{
case1:
type();
break;
/*调用键入学生信息函数*/
case2:
look();
/*调用查看函数*/
case3:
search_name();
/*调用姓名查看函数*/
case4:
search_number();
/*调用学号查看函数*/
case5:
order();
/*调用排序函数*/
case6:
del();
/*调用删除函数*/
case7:
save();
/*调用保存函数*/
case8:
see();
/*调用打开文件函数*/
case9:
welcome();
/*调用我的个人信息函数*/
case0:
flag=1;
/*退出SWITCH语句*/
default:
错误!
}
if(flag)break;
/*如果选择0就退出循环*/
}
}
voidwelcome()/*我的个人信息函数*/
system("
CLS"
\n\n\t\t------------个人信息------------"
/*在屏幕上输出一下信息*/
\n\n\n\n\t\t姓名:
郗绿阳"
\t\t\tSex:
男\n"
\t\t年龄:
20\n"
\n\t\t\t--------学习经历--------\n\n\n"
\t\t小学:
北大小学\n\n"
\t\t初中:
禹州市神垕一中\n\n"
\t\tS高中:
禹州五高\n\n"
\t\t大学:
洛阳理工学院\n\n"
\n\n\t\t按任意键返回欢迎屏幕!
getch();
/*按任意键返回主函数*/
voidtype()/*定义键入学生信息函数*/
inti;
/*定义局部变量*/
\t\t输出你想输入的学生信息个数:
scanf("
n);
for(i=0;
i<
n;
i++)/*输入每个学生的信息*/
\n\t\t\t----------------\n"
\t\t\t学号:
%s"
stu[i].num);
/*输入学号*/
\t\t\t姓名:
stu[i].name);
/*输入姓名*/
\t\t\t性别:
%S"
stu[i].sex);
/*输入性别*/
\t\t\t英语:
stu[i].english);
/*输入英语成绩*/
\t\t\t数学:
stu[i].math);
/*输入数学成绩*/
\t\t\t语文:
stu[i].chinese);
/*输入语文成绩*/
stu[i].aver=((float)stu[i].english+(float)stu[i].math+(float)stu[i].chinese)/3;
/*计算平均成绩*/
stu[i].sum=(float)stu[i].english+(float)stu[i].math+(float)stu[i].chinese;
/*计算总成绩*/
\t\t\t平均成绩=%4.1f\n"
stu[i].aver);
/*输出平均成绩*/
\t\t\t总成绩=%4.1f\n"
stu[i].sum);
/*输出总成绩*/
\n\n\t\t\t按任意键返回菜单!
!
voidsave()/*建立保存文件函数*/
FILE*fp;
/*定义文件型指针*/
if((fp=fopen("
student.txt"
"
wb"
))==NULL)/*打开输出文件*/
不能打开文件!
return;
/*终止程序*/
i++)/*向student文件中写入信息*/
if(fwrite(&
stu[i],sizeof(structstudent),1,fp)!
=1)
printf("
文件写入错误\n"
fclose(fp);
/*关闭文件*/
\n\n\n\n\t\t\t学生信息保存成功!
\n\n\n\n\t\t\t按任意键返回菜单!
voidlook()/*定义查看函数*/
//n=openl();
/*调用openl函数*/
\t学号\t姓名\t性别\t英语\t数学\t语文\t平均成绩\t总成绩\n"
i++)/*输出所有的学生信息*/
%10s\t%s\t%2s\t%d\t%d\t%d\t%3.1f\t\t%6.1f\n"
stu[i].num,stu[i].name,
stu[i].sex,stu[i].english,stu[i].math,stu[i].chinese,stu[i].aver,stu[i].sum);
\n\n\n\t\t\t按任意键返回菜单"
voidsearch_name()/*按姓名查看函数*/
/*声明字符数组*/
\t\t\t请输入学生姓名:
name);
i++)
if(strcmp(stu[i].name,name)==0)/*将输入的姓名与结构体中的姓名进行比较*/
stu[i].sex,stu[i].english,stu[i].math,stu[i].chinese,stu[i].aver,stu[i].sum);
voidsearch_number()/*定义按学号查看函数*/
charnumber[15];
\t\t\t请输入学号:
number);
if(strcmp(stu[i].num,number)==0)/*将输入的学号与结构体中的学号进行比较*/
voidorder()/*定义排序函数*/
inti,j;
chara;
structstudenttemp;
/*声明结构体变量*/
i++)/*对数据进行排序*/
for(j=i+1;
j<
j++)
if(stu[i].sum<
stu[j].sum)
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
getchar();
if(a=='
)/*是否保存排序后的文件*/
save();
else
voiddel()/*定义删除学生信息函数*/
\t\t\t输入学生名字:
if(strcmp(stu[i].name,name)==0)
getch();
真的删除?
getchar();
scanf("
if(a=='
)/*是否删除该信息*/
{
for(;
stu[i]=stu[i+1];
n=n-1;
printf("
你已经删除信息"
}
else
getch();
intopenl()/*定义打开文件函数*/
system("
FILE*fp;
rb"
))==NULL)
Cannotopenfile.\n"
exit(0);
feof(fp);
fread(&
stu[i],sizeof(structstudent),1,fp);
return(i-1);
voidsee()/*打开并查看文件*/
n=openl();
文件打开成功!
按任意键查看!
八、运行结果
菜单屏幕
输入学生信息
查看学生信息
按姓名查询
按学号查询
按平均成绩排序
删除学生信息
保存文件
打开文件
我的个人信息