学生档案管理系统c语言课程设计.docx
《学生档案管理系统c语言课程设计.docx》由会员分享,可在线阅读,更多相关《学生档案管理系统c语言课程设计.docx(26页珍藏版)》请在冰豆网上搜索。
![学生档案管理系统c语言课程设计.docx](https://file1.bdocx.com/fileroot1/2022-11/27/11ff0254-16bc-42b7-b7f1-7fd8b72d01e3/11ff0254-16bc-42b7-b7f1-7fd8b72d01e31.gif)
学生档案管理系统c语言课程设计
..
一、课题设计内容与主要功能1
第1节.设计内容.1
第2节.主要功能.1
二、课题解析.错误!
不决义书签。
第1节.类声明表.错误!
不决义书签。
第2节.解析课程设计项目的实现方法3
三、主要功能的实现步骤4
四、程序测试与结论5
五、总结.11
六、附件14
word教育资料
..
一、课题设计内容与主要功能
1、设计内容:
为了满足学生档案管理的要求,经过计算机技术给档案管理人员带来便利。
使用c
语言编写了学生档案此管理系统。
本系统主要实现学生档案管理的功能,经过此系统方
便对学生档案管理。
包括学号、姓名、性别、年龄、备注。
所设计的系统以菜单方式工
作,为用户供应清楚的使用提示,依据用户的选择来进行各种办理。
图书信息的录入后,
系统依据有必然的规范格式显示,录入的学生信息用文件形式保存,并能够对其进行修
改、排序、插入、排序盘问等基本操作。
整个程序实现链表操作,对学生信息的操作逐
个地进行。
学生档案管理系统成立框架
学
1.
学生基本信息录入
生
2.
学生基本信息显示
档
3.
学生基本信息保存
案
4.
学生基本信息更正
按姓名更正
管
5.
学生基本信息插入
按姓名插入
理
6.
学生基本信息删除
按姓名删除
系
7.
学生基本信息排序
统
8.
学生基本信息按姓名盘问
按姓名盘问
9.
从文件中读入学生基本信息
10.
退出系统
2、主要功能:
1、本系统采用一个包括N个数据的结构体数组,每个数据的结构应当包括:
学号、姓名、性别、年龄、备注。
word教育资料
..
2、本系统显示这样的菜单:
请选择系统功能项:
1.学生基本信息录入;2.学生基本信息显示;3.学生基本信息保存;4.学生基本信息更正;5.学生基本信息插入;6.学生基本信息删除;7.学生基本信息排序;8.学生基本信息按姓名盘问;9.从文件中读入学生基本信息;10.退出系统
3、执行一个详尽的功能此后,程序将重新显示菜单。
4、将学生基本信息保存到文件中。
二、课题解析
1、类说明表
名称属性说明
name
no
数据成员说明学生姓名
数据成员说明学生学号
sex
数据成员说明学生性别
age数据成员说明学生年龄
remark
数据成员说明学生备注
2、实现方法及核心算法实现代码:
主函数:
voidmain()
录入函数:
voidenter()
word教育资料
..
显示函数:
voidlist()
保存函数:
voidsave()
插入函数:
insert()
更正函数:
voidrevise()
删除函数:
voiddelete()删除录入的学生信息
排序函数:
voidsort()排序录入的学生信息
查找函数:
voidqseek()查找录入的学生信息
读取函数:
intload()读取保存在文件中的学生信息
三、主要功能的实现步骤
模块一:
头文件,变量定义,函数的声明
对系统所使用的变量进行定义,对函数进行声明
模块二:
学生信息的录入
intenter(STUDENTt[])录入学生的基本信息。
模块三:
学生信息的显示
voidlist(STUDENTt[],intn)就是把学生的基本信息显示在电脑上。
模块四:
学生信息的保存
voidsave(STUDENTt[],intn)就是在把学生基本信息的保存下来。
模块五:
学生信息的更正
voidrevise(STUDENTt[],intn)插入学生信息。
模块六:
学生信息的插入
intinsert(STUDENTt[],intn)更正已经录入的学生信息
模块七:
学生信息的删除
intdelete(STUDENTt[],intn)删除录入的学生信息
模块八:
学生信息的排序
voidsort(STUDENTt[],intn)排序录入的学生信息
模块九:
学生信息按姓名查找
voidqseek(TSTUDENTt[],intn)查找录入的学生信息
模块十:
学生信息的读入
intload(STUDENTt[])读取保存在文件中的学生信息
word教育资料
..
模块十一:
退出系统
四、程序测试与结论
进入系统输入学生信息
显示信息
word教育资料
..
保存信息
word教育资料
..
更正信息
更正成功
word教育资料
..
插入信息
word教育资料
..
显示插入成功
删除信息
word教育资料
..
排序信息
word教育资料
..
盘问信息
word教育资料
..
读入信息(附加)
总结:
总的来说这个程序大体实现了题目的要求,但是这套程序依旧存在着好多的问题
与不足。
比方,程序中主函数写的有点繁琐,有太多的嵌套,不是那么井井有条,条理
清楚,程序说明也不是很完满,对信息办理功能还有些不足之处,提示信息不明确。
还
有一点就是没有做到实现分类查找,分别依据姓名、学号、年龄、性别、备注等进行查
word教育资料
..
找。
这个系统主若是参照老师的模版编写的,同时也获取了老师和同学的一些帮助。
我
在做系统的过程中也遇到了好多问题,有的是知识不足,有的是考虑不够周祥。
事实证
明,只靠自己的知识面还是很窄,独立办理问题能力不是很强,今后还要加强对c语言
的学习。
我认为关于C语言编写的程序来说,使用方法大体都是相同的,所以若是要改进的
话,就是要改进一些算法,尽量把界面编写清楚,提示信息全面,方便易用。
五、课程设计总结
C语言这学期我们开始的一门新课,早就听闻上届学哥学姐说C语言是“天书”,是
我们这学期最难的学科之一了。
早听闻这些我就怕了。
第一我感觉特别遗憾,课程设计的第一天,我还在家里,因为收到的信息比较迟所以未能及时赶到学校,也至于第一天最重要的内容没有学到,在接下来的两天上机时间也未能追上大家的进度,自己也感觉自己做不出这个程序。
没有专心的学。
更加笨拙的是我在争辩的时候拷贝了同学的部分程序,自己没能真切的认识这个程序。
争辩的时候,欧阳老师简单的问了我几个问题就发现我没有专心学,严格责怪了我,也认识到了我的错误。
当看到其他同学都是A,只有包括我在内的少许几个一同学得B,我感觉心情有些愁闷,同时更加坚定了我要自己做好这个《学生档案管理系统》程序的
信心。
自己也想到了,就算课程设计被我谋利钻营完成了,但是省二、国二呢,最后自己还是要好好学的。
自己没有掌握C语言,又有什么意义呢!
当我自己真切的研究这个程序的时候我感觉有点蒙了,我感觉我自己没有这个能力做好,所以我想找学长帮我,这样我就不用怕了,但是今后我想到省二、国二,我放弃了这个想法,什么还是靠自己。
一边懊悔自己平时没有好好学习,一边开始硬着头皮上阵了。
第三天下午和夜晚我都泡在图书馆里,到夜晚快要10点才回寝,感觉自己还是很蒙,但是也有收获,就是我知道我要做这个模块要定位函数,要用到链表。
这让我信心若狂,我感觉我已经找到了起点,有个好的开始我相信我就能做好。
夜晚回到宿舍后我也不敢再耽误时间去玩手机了,赶快去看关于函数、链表的书,
word教育资料
..
第四天看了一天此后我感觉原来计算机也不是什么“天书”啊,可是我们没有好好去看
它,去领悟它。
我心中暗想,此次程序设计我很有收获,它让我对计算机、对C语言产
生了兴趣,让我发现原来这样有实践的学习能让人产生很大的兴趣,能让人更好的领悟
它。
我自己研究这个程序快要两天,看了好多资料,着手进一步改进这个程序了,困难
的时候又来了,我不知道用什么语句去完成查找。
最好If语句找到后,链表来执行删除功能,可好似链表那个真的好难,在同学们的帮助下我终于把那个链表完成,在运行、检查、更正后,终于合格,程序运行成功了。
在完成自己的程序设计后,骄傲的感觉充满了我的内心,是啊,我不是很笨,我可是没有专心,经过此次设计后,在学习方面我对自己有了信心,若是我专心去学,我努力去做,没有我做不到的。
突然间我很喜欢这戏C语言实训,在这一周,有欢笑,有忧虑,有快乐也有不快乐,但是无论什么我都还算快乐得度过了这一周,和同学们一同研究、一同做程序、一同检
查、一同谈论对与错。
在程序完成的那一时辰,我很快乐的笑了,因为那是我付出了汗水做的程序,那时我的心血!
此次实训对我来说也是一次教训,让我再次深刻地理解什么事情都要靠自己,自己的事情要自己做且要做好。
此次实训也让我对学习,对C语言计算机都产生了更浓厚的兴趣,也让同学们有了更好的团队协作精神,也让我感觉在大学学习很好。
感谢老师让我们有了此次机遇来体验编程的快乐,感谢老师不胜其烦的讲解。
也让我们有机遇感觉大学的美好岁月。
纺工1291彭旺
2013年6月28日
word教育资料
..
六、附件
/*学生基本信息管理系统*/
/******头文件(.h)***********/
#include"stdio.h"/*I/O函数*/
#include"stdlib.h"/*标准库函数*/
#include"string.h"/*字符串函数*/
#defineM50/*定义常数表示记录数*/
typedefstruct/*定义教师基本信息数据结构*/
{
charname[20];/*学生姓名*/
charno[20];/*编号*/
charsex[20];/*性别*/
intage;/*年龄*/
charremark[20];/*备注*/
}STUDENT;
/******以下是函数原型*******/
word教育资料
..
intenter(STUDENTt[]);/*
输入记录*/
voidlist(STUDENTt[],intn);/*
显示记录*/
voidsave(STUDENTt[],intn);/*
记录保存为文件*/
intfind(STUDENTt[],intn,char*s)/*
查找函数*/;
voidprint(STUDENTtemp);/*
显示单条记录*/
voidrevise(STUDENTt[],intn);/*
更正记录*/
intinsert(STUDENTt[],intn);/*
插入记录*/
intdelete(STUDENTt[],intn)/*
删除记录*/;
intload(STUDENTt[]);/*
从文件中读记录*/
voidsort(STUDENTt[],intn);/*
按姓名排序*/
voidqseek(STUDENTt[],intn);/*
快速查找记录*/
intmenu_select();/*主菜单函数*/
main()
{
STUDENTstudent[M];/*定义结构体数组*/
intlength;/*保存记录长度*/
for(;;)/*无量循环*/
{
switch(menu_select())/*调用主菜单函数,返回值整数作开关语句的条件*/
{
case1:
length=enter(student);break;/*输入记录*/
case2:
list(student,length);break;/*显示全部记录*/
case3:
save(student,length);break;/*保存文件*/
case4:
revise(student,length);break;/*更正记录*/
case5:
length=insert(student,length);break;/*插入记录*/
case6:
length=delete(student,length);break;/*删除记录*/
case7:
sort(student,length);break;/*按姓名排序*/
word教育资料
..
case8:
qseek(student,length);break;/*快速查找记录*/
case9:
length=load(student);break;/*读文件*/
case10:
exit(0);/*如返回值为10则程序结束*/
}
}
}
/*菜单函数,函数返回值为整数,代表所选的菜单项*/
menu_select()
{
chars[80];
intc;
printf("pressanykeyentermenu......\n");/*提示压任意键连续*/
printf("********************MENU*********************\n\n");
printf("
1.
学生基本信息录入\n");
printf("
2.
学生基本信息显示\n");
printf("
3.
学生基本信息保存\n");
printf("
4.
学生基本信息更正\n");
printf("
5.
学生基本信息插入\n");
printf("
6.
学生基本信息删除\n");
printf("
7.
学生基本信息排序\n");
printf("
8.
学生基本信息按姓名盘问\n");
printf("
9.
从文件中读入学生基本信息\n");
printf("
10.
退出系统\n");
printf("***********************************************\n");
do{
printf("\nEnteryouchoice(1~10):
");/*提示输入选项*
scanf("%s",s);
c=atoi(s);
}while(c<1||c>10);
word教育资料
..
returnc;
}
/***输入记录,形参为结构体数组,函数值返回种类为整型表示记录长度*/
intenter(STUDENTt[])
{
inti,n;
char*s;
printf("\npleaseinputnum\n");/*提示信息*/
scanf("%d",&n);/*输入记录数*/
printf("pleaseinputrecord\n");/*提示输入记录*/
printf("姓名学号性别年龄
备注\n");
printf("-------------------------------------------------------------------
\n");
for(i=0;i{
scanf("%s%s%s%d%s",t[i].name,t[i].no,t[i].age,t[i].course,&t[i].remark);
/*输入记录*/
printf("-------------------------------------------------------------------
\n");
}
returnn;/*返回记录条数*/
}
/*显示记录,参数为记录数组和记录条数*/
voidlist(STUDENTt[],intn)
{
word教育资料
..
inti;
printf("\n\n*****************************STUDENT***************************
*\n");
printf("姓名学号性别年龄
备注\n");
printf("-------------------------------------------------------------------
\n");
for(i=0;i
printf("%-20s%-20s%-20s%-10d%-10s\n",t[i].name,t[i].no,t[i].sex,t[i].age,t[i].remark);
if((i+1)%10==0)
{
printf("Pressanykeycontinue...\n");
getch();
}
printf("*********************************end*******************************
*\n");
}
/*显示指定的一条记录*/
voidprint(STUDENTtemp)
{
printf("\n\n*****************************STUDENT***************************
*\n");
printf("姓名学号性别年龄
备注\n");
word教育资料
..
printf("-------------------------------------------------------------------
\n");
printf("%-20s%-20s%-20s%-10d%-10s\n",temp.name,temp.no,temp.sex,temp.age,temp.remark);
printf("*******************************end*********************************
\n");
}
intfind(STUDENTt[],intn,char*s)
{
inti;
for(i=0;i{
if(strcmp(s,t[i].name)==0)
returni;
}
returni;
}
/*删除函数,参数为记录数组和记录条数*/
intdelete(STUDENTt[],intn)
{
chars[20];/*要删除记录的姓名*/
intch=0;
inti,j;
printf("pleasedeletedname\n");/*提示信息*/
scanf("%s",s);/*输入姓名*/
i=find(t,n,s);/*调用find函数*/
word教育资料
..
if(i>n-1)/*若是i>n-1高出了数组的长度*/
printf("nofoundnotdeleted\n");/*显示没找到要删除的记录*/
else
{
print(t[i]);/*调用输出函数显示该条记录信息*/
printf("Areyousuredeleteit(1/0)\n");/*确认可否要删除*/
scanf("%d",&ch);/*输入一个整数0或1*/
if(ch==1)/*若是确认删除整数为1*/
{
for(j=i+1;j{
strcpy(t[j-1].name,t[j].name);/*将后一条记录的学生姓名拷贝到前一条
*/
strcpy(t[j-1].no,t[j].no);/*将后一条记录的编号拷贝到前一条*/
strcpy(t[j-1].sex,t[j].sex);/*将后一条记录的性别拷贝到前一条*/
t[j-1].age=t[j].age;;/*将后一条记录的年龄拷贝到前一条*/
Strcpy(t[j-1].remark,t[j].remark);/*将后一条记录的备注拷贝到前一条
*/
}
n--;/*记录数减1*/
}
}
returnn;/*返回记录数*/
}
/*插入记录函数,参数为结构体数组和记录数*/
intinsert(STUDENTt[],intn)/*插入函数,参数为结构体数组和记录数*/
{
STUDENTtemp;/*新插入记录信息*/
inti,j;
chars[20];/*确定插入在哪个记录从前*/
printf("pleaseinputrecord\n");
word教育资料
..
printf("\n\n*****************************STUDENT***************************
*\n");
printf("姓名学号性别年龄
备注\n");
printf("-------------------------------------------------------------------
\n");
scanf("%s%s%s%d%s",temp.name,temp.no,temp.sex,temp.age,temp.remark);/*输
入插入信息*/
printf("-------------------------------------------------------------------
\n");
printf("pleaseinputlocatename\n");
scanf("%s",s);/*输入插入地址的姓名*/
i=find(t,n,s);/*调用find,确定插入地址*/
for(j=n-1;j>=i;j--)/*从最后一个结点开始向后搬动一条*/
{
strcpy(t[j+1].name,t[j].name);/*当前记录的学生姓名拷贝到后一条*/
strcpy(t[j+1].no,t[j].no);/*当前记录的编号拷贝到后一条*/
strcpy(t[j+1].sex,t[j].sex);/*当前记录的性别拷贝到后一条*/
t[i].age=temp.age;/*将新插入记录的年龄拷贝到第i个地址*/
strcpy(t[j+1].remark,t[j].remark);/*当前记录的备注拷贝到后一条*/
}
strcpy