Linux环境下C语言《学生选课管理系统》全源代码含流程图个人总结对您有用的话顶一下.docx
《Linux环境下C语言《学生选课管理系统》全源代码含流程图个人总结对您有用的话顶一下.docx》由会员分享,可在线阅读,更多相关《Linux环境下C语言《学生选课管理系统》全源代码含流程图个人总结对您有用的话顶一下.docx(86页珍藏版)》请在冰豆网上搜索。
Linux环境下C语言《学生选课管理系统》全源代码含流程图个人总结对您有用的话顶一下
//第一部分:
结构体、流程图、总结………………Page1
//第二部分C语言源代码………………Page10
//第一部分
一、简介:
本系统称为“学生选课管理系统”,主要功能是实现对学生信息和教师信息的管理,以及学生成绩的管理。
该系统分为三级身份:
管理员、教师、学生。
其中管理员的权限有:
1)、添加学生或老师的信息,2)、删除学生或老师信息,3、修改学生或老师信息,4)查找学生或老师信息。
教师的权限:
1)仅可以修改自己密码,2)查看所有关于自身的信息,3)修改其所授科目的学生科目的成绩。
学生的权限:
仅可以修改自己的密码,查看所有有关自己的信息,另外还要可以选课。
二、设计思想;
[1]:
分别把学生信息、科目信息和教师—科目信息建立三个链表。
//科目信息
typedefstructsubject_info
{
floatSUB_notes[3];//科目成绩
intSUB_csscore;//科目学分
charSUB_csname[32];//科目名称
structlist_headlist;
}SUB;
//学生信息
typedefstructSTU_info
{
floatSTU_totalscore;//总分
intSTU_id;//学号
intSTU_age;//年龄
intSTU_grade;//年级
intSTU_place;//名次
charSTU_name[32];//姓名
charSTU_psword[32];//密码
SUBsubject[3];
structlist_headlist;
}STU;
//教师信息:
typedefstructTCH_info
{
intTCH_id;//工号
charTCH_name[32];//姓名
charTCH_psword[32];//密码
SUBsubject[1];
structlist_headlist;
}TEC;
//管理员信息
typedefstructADM_info
{
charADM_usename[8];
charADM_psword[6];
}ADM;
ADMuse[1];
#defineY'y'
#defineN'n'
#defineS_FLAG's'
#denfineT_FLAG't'
#defineA_FLAG'a'
voidgettime();//获取当前时间
voidmain_menu();//主菜单
voidstu_login();//学生登录
voidopenf(char*filename);//判断文件是否存在
voidtec_login();//老师登录
voidadm_login();//管理员登录
voidadm_nextmenu();//管理员2级菜单
voida_updt_stuinfo();//操作学生信息
voida_updt_tecinfo();//操作老师信息
voida_updt_myinfo();//操作管理员自身信息
voida_add_stuinfo();//添加学生信息
voida_add_tecinfo();//添加老师信息
voida_mdify_stuinfo();//修改学生信息
voida_del_info(charflag);//删除信息
voida_mdify_tecinfo();//修改老师信息
voida_seek_stuinfo();//查找学生信息
voida_seek_tecinfo();//查找老师信息
voidshow(charflag);//显示信息
voidsave(charflag,charsystem);//保存信息
voidcheck(charflag);//验证密码
voidcommom();//公用函数集合
voida_show(charflag);//显示信息
voida_seek_info(charflag);//查找信息
voida_mdify_info(charflag);//修改学生或老师信息
voidstu_nextmenu(inttmpid);//学生菜单
voidtec_nextmenu(inttmpid);//老师菜单
voids_show_myinfo(inttmpid);//学生显示自己信息
voidt_show_myinfo(inttmpid);//教师显示自己信息
voids_updt_myinfo(inttmpid);//学生更新自己信息
voids_select_subject(inttmpid);//学生选课
voidt_updt_stuinfo(inttmpid);//教授更新自己信息
voidt_updt_myinfo(inttmpid);//教授显示自己信息
voidreadf();//从文件中读取信息
voidstu_sort();//对学生链表排序
floatave(floatcore[3]);//求平均成绩
float(*f)(floatcore[3]);//
intinputpsword(char*pass);//输入密码回显*
[2]:
模块分析
开始
主界面
E:
exit1:
student2:
teacer3:
admin
退出stu_logintec_loginamd_login
student_nextmenuteacher_menuadminmenu
student_nextmenu
stu_show_myinfostu_update_mypswordstu_select_mysubject返回上一级
\teacher
tec_show_myinfo()tec_update_mypsword();tec_next_menu();返回上一级
tec_next_menu()
tec_show_stuinfo()tec__update_stuscore();返回上一级
输入信息、保存修改
保存
adm_nextmenu
ADM_update_stuinfoADM_update_tecinfoADM_updat_myinfo返回上一级
AdddelupdateshowAdddelupdateshowchange_mypsword
[3]:
流程图
开始
1、2、3、4
主界面
1234
tec_login
adm_login
stu_login
exit
N
login
login
YY
login
login
YYYY
q
stu_login
N
return
sign_sub
show_info
1、2.、3、4
Y
1234
Y
N
N
chag_pswod
N
YYY
tec_login
Y
up_stuinfo
chag_pswod
show_info
1、2.、3、4
1234
return
Y
N
N
N
YYY
adm_login
Y
1、2.、3、4
1234
return
Y
updt_tecinfo
N
chag_pswod
N
updt_stuinfo
N
YYY
三、总结
《学生选课管理系统》,5天。
这之前学的C语言基础及C语言高级编程。
对于程序设计来说这些就是指导性的理论,我学的还算认真,自我感觉良好。
听说要做《学生选课管理系统》的时候,都有着霍霍欲试的冲动。
然而5天的历程却诉说着理论与实践结合并非易事。
开始拿到这个小项目时候还真不知道怎么下手,像猎到刺猬的饿狼,虽饥渴难耐却又无从下嘴,只好看着猎物徘徊、踌躇。
后经老师指教总算有点了头绪,真是“山重水复疑无路,柳暗花明又一村”。
我首先采取的就是化整为零的模块化分析,把整个系统分为:
管理员模块、教师模块及学生三大模块,然后各个模块再按照不同的功能细分成不同的模块。
然而我在运用此思想时有点误解。
我在写代码时,把代码模块化过了头了。
我把每个函数都单列在每个相对应的文件里,搞得有点乱乱的。
又经老师指点后,我把各模块下相应的函数都归并到一个文件里,这样就显得疏朗多了。
修正这点失误着实用了我不少时间,然而,接下来我又卡住了。
因为系统需要操作大量的数据,所以就牵涉到如何把这些数据保存、读取、修改等操作。
我最初的思想是把这么多数据在建立后就存入文件里,然后在需要操作时再读取文件信息进行操作。
时间毕竟有限,这样想就这样做,然而结果并不像我预期的那样,我不知道哪里出了问题,先是梳理思路后是检查代码再者就是上网查找相关信息。
几经曲折,总算离我预期结果不远时,又卡住了!
这已经是第四天了,无奈,只好在去吃饭的路上向我同桌取经。
听了他说,“你连软件设计的基本思想都不懂”之后我一脸迷惘。
经他细心讲解才明白我这种思路做出来的程序要不断的存取数据,需要较多的系统资源,效率会很低。
他给我提供了另外一种思想:
在程序启动时把所需要的数据从文件里读到内存,然后直接在内存里操作,在需要时在进行保存。
呵呵,从我向他请教还没有10分钟,他就把我从迷惘中带回了透彻的光明。
这时,离时限还有一天半的时间,而我只是实现了程序的基本框架。
但换了思路之后,我速度明显提高了,在剩下的时间里把程序的基本功能都实现了。
看样子,交流真的很重要,遇到问题时最好不要一个人绞尽脑汁,要多交流请教啊!
//第二部分
//C语言全源代码
//*************************************************************
//*********************************************************
//list.h文件
#ifndef_LIST_H
#define_LIST_H
#define_INLINE_staticinline
structlist_head{
structlist_head*next,*prev;
};
#defineLIST_HEAD_INIT(name){&(name),&(name)}
#defineLIST_HEAD(name)\
structlist_headname=LIST_HEAD_INIT(name)
#defineINIT_LIST_HEAD(ptr)do{\
(ptr)->next=(ptr);(ptr)->prev=(ptr);\
}while(0)
_INLINE_void__list_add(structlist_head*add,
structlist_head*prev,
structlist_head*next)
{
next->prev=add;
add->next=next;
add->prev=prev;
prev->next=add;
}
_INLINE_voidlist_add(structlist_head*add,structlist_head*head){
__list_add(add,head,head->next);
}
_INLINE_voidlist_add_tail(structlist_head*add,structlist_head*head)
{
__list_add(add,head->prev,head);
}
_INLINE_void__list_del(structlist_head*prev,structlist_head*next)
{
next->prev=prev;
prev->next=next;
}
_INLINE_voidlist_del(structlist_head*entry)
{
__list_del(entry->prev,entry->next);
}
_INLINE_voidlist_del_init(structlist_head*entry)
{
__list_del(entry->prev,entry->next);
INIT_LIST_HEAD(entry);
}
_INLINE_intlist_empty(structlist_head*head)
{
returnhead->next==head;
}
_INLINE_voidlist_splice(structlist_head*list,structlist_head*head)
{
structlist_head*first=list->next;
if(first!
=list){
structlist_head*last=list->prev;
structlist_head*at=head->next;
first->prev=head;
head->next=first;
last->next=at;
at->prev=last;
}
}
#definelist_entry(ptr,type,member)\
((type*)((char*)(ptr)-(unsignedlong)(&((type*)0)->member)))
#definelist_for_each(pos,head)\
for(pos=(head)->next;pos!
=(head);pos=pos->next)
#definelist_for_each_safe(pos,pnext,head)\
for(pos=(head)->next,pnext=pos->next;pos!
=(head);\
pos=pnext,pnext=pos->next)
#undef_INLINE_
#endif
//**********************************************************************8
//***********************************************************************
//****头文件head.h
#ifndef_HEAD_H_
#define_HEAD_H_
#include
#include"list.h"
#include
#include
#include
#defineY'y'
#defineN'n'
#defineA_FLAG'a'
#defineS_FLAG's'
#defineT_FLAG't'
externstructlist_headstu;//
externstructlist_headtec;//
//科目信息
typedefstructsubject_info
{
floatSUB_notes[3];//科目成绩
intSUB_csscore;//科目学分
charSUB_csname[32];//科目名称
structlist_headlist;
}SUB;
//学生信息
typedefstructSTU_info
{
floatSTU_totalscore;//总分
intSTU_id;//学号
intSTU_age;//年龄
intSTU_grade;//年级
intSTU_place;//名次
charSTU_name[32];//姓名
charSTU_psword[32];//密码
SUBsubject[3];
structlist_headlist;
}STU;
//教师信息:
typedefstructTCH_info
{
intTCH_id;//工号
charTCH_name[32];//姓名
charTCH_psword[32];//密码
SUBsubject[1];
structlist_headlist;
}TEC;
//管理员信息
typedefstructADM_info
{
charADM_usename[8];
charADM_psword[6];
}ADM;
ADMuse[1];
voidgettime();//获取当前时间
voidmain_menu();//主菜单
voidstu_login();//学生登录
voidopenf(char*filename);//判断文件是否存在
voidtec_login();//老师登录
voidadm_login();//管理员登录
voidadm_nextmenu();//管理员2级菜单
voida_updt_stuinfo();//操作学生信息
voida_updt_tecinfo();//操作老师信息
voida_updt_myinfo();//操作管理员自身信息
voida_add_stuinfo();//添加学生信息
voida_add_tecinfo();//添加老师信息
voida_mdify_stuinfo();//修改学生信息
voida_del_info(charflag);//删除信息
voida_mdify_tecinfo();//修改老师信息
voida_seek_stuinfo();//查找学生信息
voida_seek_tecinfo();//查找老师信息
voidshow(charflag);//显示信息
voidsave(charflag,charsystem);//保存信息
voidcheck(charflag);//验证密码
voidcommom();//公用函数集合
voida_show(charflag);//显示信息
voida_seek_info(charflag);//查找信息
voida_mdify_info(charflag);//修改学生或老师信息
voidstu_nextmenu(inttmpid);//学生菜单
voidtec_nextmenu(inttmpid);//老师菜单
voids_show_myinfo(inttmpid);//学生显示自己信息
voidt_show_myinfo(inttmpid);//教师显示自己信息
voids_updt_myinfo(inttmpid);//学生更新自己信息
voids_select_subject(inttmpid);//学生选课
voidt_updt_stuinfo(inttmpid);//教授更新自己信息
voidt_updt_myinfo(inttmpid);//教授显示自己信息
voidreadf();//从文件中读取信息
voidstu_sort();
floatave(floatcore[3]);
float(*f)(floatcore[3]);
intinputpsword(char*pass);
voida_chpsword();
#endif
//******************************************