Linux环境下C语言《学生信息管理系统》最全文档_第1页
Linux环境下C语言《学生信息管理系统》最全文档_第2页
Linux环境下C语言《学生信息管理系统》最全文档_第3页
Linux环境下C语言《学生信息管理系统》最全文档_第4页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、/第一部分:结构体、流程图、总结Page1/第二部分C 语言源代码Page10/ 第一部分一、简介:本系统称为“学生选课管理系统” ,主要功能是实现对学生信息和教师信息的管理,以及学生成绩的管理。该系统分为三级身份:管理员、教师、学生。其中管理员的权限有: 1)、添加学生或老师的信息, 2)、删除学生或老师信息, 3、修改学生或老师信息, 4)查找学生或老师信息。教师的权限: 1)仅可以修改自己密码, 2)查看所有关于自身的信息, 3)修改其所授科目的学生科目的成绩。学生的权限:仅可以修改自己的密码,查看所有有关自己的信息,另外还要可以选课。二、设计思想;1: 分别把学生信息、科目信息和教师科

2、目信息建立三个链表。/科目信息typedef struct subject_infofloat SUB_notes3;/科目成绩intSUB_csscore;/科目学分charSUB_csname32;/科目名称structlist_headlist;SUB;/学生信息typedef struct STU_infofloat STU_totalscore;/总分intSTU_id;/学号intSTU_age;/年龄intSTU_grade;/年级intSTU_place;/名次char STU_name32;/姓名char STU_psword32;/密码SUBsubject3;structl

3、ist_headlist;STU;/教师信息 :typedef struct TCH_infointTCH_id;char TCH_name32;char TCH_psword32;SUB subject1;structlist_head list;TEC;/管理员信息typedef struct ADM_infochar ADM_usename8;char ADM_psword6;ADM;ADM use1;#defineY'y'#defineN'n'#defineS_FLAG's'#denfineT_FLAG't'#define

4、A_FLAG'a'void gettime();void main_menu();void stu_login();void openf (char *filename);void tec_login();void adm_login();void adm_nextmenu();void a_updt_stuinfo();void a_updt_tecinfo();void a_updt_myinfo();息void a_add_stuinfo();void a_add_tecinfo();void a_mdify_stuinfo();void a_del_info(char

5、flag);void a_mdify_tecinfo();void a_seek_stuinfo();void a_seek_tecinfo();/工号/姓名/密码/获取当前时间/主菜单/学生登录/判断文件是否存在/老师登录/管理员登录/管理员 2 级菜单/操作学生信息/操作老师信息/ 操作管理 员自身 信/添加学生信息/添加老师信息/修改学生信息/删除信息/修改老师信息/查找学生信息/查找老师信息void show (char flag);void save (char flag,char system); void check(char flag);void commom();void a

6、_show(char flag);void a_seek_info(char flag);void a_mdify_info(char flag);息void stu_nextmenu(int tmpid); void tec_nextmenu(int tmpid); void s_show_myinfo(int tmpid); void t_show_myinfo(int tmpid); void s_updt_myinfo(int tmpid); void s_select_subject(int tmpid); void t_updt_stuinfo(int tmpid); void t

7、_updt_myinfo(int tmpid); void readf();void stu_sort();float ave (float core3);float (*f)(float core3);int inputpsword(char *pass);2:模块分析/显示信息/保存信息/验证密码/公用函数集合/显示信息/查找信息/修改学生 或老师信/学生菜单/老师菜单/学生显示自己信息/教师显示自己信息/学生更新自己信息/学生选课/教授更新自己信息/教授显示自己信息/从文件中读取信息/对学生链表排序/求平均成绩/输入密码回显*开始主界面E:exit1: student2:teacer3:

8、admin退出stu_logintec_loginamd_loginstudent_nextmenuteacher_menuadminmenustudent_nextmenustu_show_myinfostu_update_mypswordstu_select_mysubject返回上一级teachertec_show_myinfo()tec_update_mypsword();tec_next_menu();返回上一级tec_next_menu()tec_ show_stuinfo()tec_update_stuscore();返回上一级输入信息、保存修改保存adm_nextmenuADM

9、_update_stuinfoADM_update_tecinfoADM_updat_myinfo返回上一级Adddel update showAdddel update showchange_mypsword三、总结学生选课管理系统 ,5 天。这之前学的C 语言基础及C 语言高级编程。 对于程序设计来说这些就是指导性的理论,我学的还算认真,自我感觉良好。听说要做学生选课管理系统的时候,都有着霍霍欲试的冲动。然而5 天的历程却诉说着理论与实践结合并非易事。开始拿到这个小项目时候还真不知道怎么下手,像猎到刺猬的饿狼,虽饥渴难耐却又无从下嘴,只好看着猎物徘徊、踌躇。后经老师指教总算有点了头绪,真是

10、“山重水复疑无路,柳暗花明又一村” 。我首先采取的就是化整为零的模块化分析,把整个系统分为:管理员模块、 教师模块及学生三大模块, 然后各个模块再按照不同的功能细分成不同的模块。然而我在运用此思想时有点误解。我在写代码时,把代码模块化过了头了。我把每个函数都单列在每个相对应的文件里,搞得有点乱乱的。 又经老师指点后, 我把各模块下相应的函数都归并到一个文件里,这样就显得疏朗多了。修正这点失误着实用了我不少时间,然而,接下来我又卡住了。因为系统需要操作大量的数据,所以就牵涉到如何把这些数据保存、 读取、修改等操作。 我最初的思想是把这么多数据在建立后就存入文件里,然后在需要操作时再读取文件信息进

11、行操作。时间毕竟有限,这样想就这样做, 然而结果并不像我预期的那样, 我不知道哪里出了问题, 先是梳理思路后是检查代码再者就是上网查找相关信息。几经曲折,总算离我预期结果不远时,又卡住了!这已经是第四天了,无奈,只好在去吃饭的路上向我同桌取经。听了他说,“你连软件设计的基本思想都不懂”之后我一脸迷惘。经他细心讲解才明白我这种思路做出来的程序要不断的存取数据,需要较多的系统资源, 效率会很低。他给我提供了另外一种思想:在程序启动时把所需要的数据从文件里读到内存,然后直接在内存里操作,在需要时在进行保存。呵呵,从我向他请教还没有10 分钟,他就把我从迷惘中带回了透彻的光明。这时,离时限还有一天半的

12、时间,而我只是实现了程序的基本框架。但换了思路之后,我速度明显提高了, 在剩下的时间里把程序的基本功能都实现了。 看样子,交流真的很重要,遇到问题时最好不要一个人绞尽脑汁,要多交流请教啊!/ 第二部分/C 语言全源代码/*/*/list.h 文件#ifndef _LIST_H#define _LIST_H#define _INLINE_ static inlinestruct list_head struct list_head *next, *prev;#define LIST_HEAD_INIT(name) &(name), &(name)#define LIST_HEAD

13、(name) struct list_head name = LIST_HEAD_INIT(name)#define INIT_LIST_HEAD(ptr) do (ptr)->next = (ptr); (ptr)->prev = (ptr); while (0)_INLINE_ void _list_add(struct list_head *add,struct list_head *prev,struct list_head *next)next->prev = add;add->next = next;add->prev = prev;prev->

14、next = add;_INLINE_ void list_add(struct list_head *add, struct list_head *head) _list_add(add, head, head->next);_INLINE_ void list_add_tail(struct list_head *add, struct list_head *head)_list_add(add, head->prev, head);_INLINE_ void _list_del(struct list_head *prev, struct list_head *next)ne

15、xt->prev = prev;prev->next = next;_INLINE_ void list_del(struct list_head *entry)_list_del(entry->prev, entry->next);_INLINE_ void list_del_init(struct list_head *entry)_list_del(entry->prev, entry->next);INIT_LIST_HEAD(entry);_INLINE_ int list_empty(struct list_head *head)return h

16、ead->next = head;_INLINE_ void list_splice(struct list_head *list, struct list_head *head)struct list_head *first = list->next;if (first != list) struct list_head *last = list->prev;struct list_head *at = head->next;first->prev = head;head->next = first;last->next = at;at->pr

17、ev = last;#define list_entry(ptr, type, member) (type *)(char *)(ptr) - (unsigned long)(&(type *)0)->member)#define list_for_each(pos, head) for (pos = (head)->next; pos != (head); pos = pos->next)#define list_for_each_safe(pos, pnext, head) for (pos = (head)->next, pnext = pos->n

18、ext; pos != (head); pos = pnext, pnext = pos->next)#undef _INLINE_#endif/* *8/*/* * 头文件 head.h#ifndef _HEAD_H_#define _HEAD_H_#include<string.h>#include"list.h"#include<stdio.h>#include<stdlib.h>#include<time.h>#defineY'y'#defineN'n'#define A_FLAG

19、 'a'#define S_FLAG 's'#define T_FLAG 't'extern struct list_head stu;/extern struct list_head tec;/科目信息typedef struct subject_infofloat SUB_notes3;/科目成绩intSUB_csscore;/科目学分charSUB_csname32;/科目名称structlist_head list;SUB;/学生信息typedef struct STU_infofloat STU_totalscore;/总分intSTU

20、_id;/学号intSTU_age;/年龄intSTU_grade;/年级intSTU_place;/名次char STU_name32;/姓名char STU_psword32;/密码SUBsubject3;structlist_head list;STU;/教师信息 :typedef struct TCH_infointTCH_id;/工号char TCH_name32;/姓名char TCH_psword32;/密码SUB subject1;structlist_head list;TEC;/管理员信息typedef struct ADM_infochar ADM_usename8;ch

21、ar ADM_psword6;ADM;ADM use1;void gettime();void main_menu();void stu_login();void openf (char *filename);void tec_login();void adm_login();void adm_nextmenu();void a_updt_stuinfo();void a_updt_tecinfo();void a_updt_myinfo();息void a_add_stuinfo();void a_add_tecinfo();void a_mdify_stuinfo();void a_del

22、_info(char flag);void a_mdify_tecinfo();void a_seek_stuinfo();void a_seek_tecinfo();void show (char flag);void save (char flag,char system);void check(char flag);void commom();void a_show(char flag);void a_seek_info(char flag);void a_mdify_info(char flag);void stu_nextmenu(int tmpid);void tec_nextme

23、nu(int tmpid);void s_show_myinfo(int tmpid);void t_show_myinfo(int tmpid);void s_updt_myinfo(int tmpid);void s_select_subject(int tmpid);void t_updt_stuinfo(int tmpid);void t_updt_myinfo(int tmpid);void readf();void stu_sort();float ave (float core3);/获取当前时间/主菜单/学生登录/判断文件是否存在/老师登录/管理员登录/管理员 2 级菜单/操作

24、学生信息/操作老师信息/ 操作管理 员自身 信/添加学生信息/添加老师信息/修改学生信息/删除信息/修改老师信息/查找学生信息/查找老师信息/显示信息/保存信息/验证密码/公用函数集合/显示信息/查找信息/修改学生或老师信息/学生菜单/老师菜单/学生显示自己信息/教师显示自己信息/学生更新自己信息/学生选课/教授更新自己信息/教授显示自己信息/从文件中读取信息float (*f)(float core3);int inputpsword(char *pass);void a_chpsword();#endif/*/*/入口 main 函数#include<stdio.h>#incl

25、ude<stdlib.h>#include<string.h>#include<time.h>#include"head.h"LIST_HEAD(stu);LIST_HEAD(tec);int main()readf();system("clear");printf("ttt* *tt*n* *tt* *tt*Copyright (c) 2010, 易嵌教育 All rights reserved.nn* *tt* n* *tt* *tt*软件名称:学生选课管理系统摘 要 :nn* *tt* n* *tt*

26、*tt* *tt*当前版本: 1.1n作者:关仁杰 n完成日期: 2010 年 8 月2 日 n* *tt*n");/void delay(unsinged int)sleep(2);main_menu();return 0;void main_menu()int ch;char hc;system("clear");gettime();printf("ttt=学生信息管理系统=nn");printf("tt#n");printf("tt= 欢迎使用本系统a =n");printf("tt#nn

27、");printf("tt+n");printf("tt=1.学生=n");printf("tt=2.教师=n");printf("tt=3.管理员=n");printf("tt=4.退出=n");printf("tt+n");printf(" 请输入您选择的序号:n");scanf("%d",&ch);switch(ch)case 1:printf(" 您的身份是学生!n 请登录: n");get

28、time();openf("student.txt");check(S_FLAG);break;case 2:printf(" 您的身份是教师!n 请登录: n");gettime();openf("teacher.txt");check(T_FLAG);break;case 3:printf(" 您的身份是管理员!n 请登录n");gettime();adm_login();break;case 4:printf("n");printf("aaa 您已经保存相应的数据了吗?(y or

29、 n)n");getchar();scanf("%c",&hc);if(hc='y')|(hc='Y')printf(" 谢谢您使用本系统,如有需要请联系:printf(" 请按 Enter 键退出! n");getchar();getchar();exit(0);QQ: n");else if(hc='n')|(hc='N')printf(" 您还没有保存,系统将为您自动保存!n");save(S_FLAG,Y);break;def

30、ault:printf(" 您的输入有误,请返回上级菜单!n");getchar();getchar();main_menu();/试读文件,验证是否建立void openf(char *filename)FILE *fp;if(fp=fopen(filename,"r")=NULL)filename=NULL;printf(" 对不起!还没有建立相应的信息!n 请于管理员联系!n");getchar();getchar();main_menu();fclose(fp);/管理员登录void adm_login()char pswor

31、d6;FILE *fp;int i=0;if(fp=fopen("psword.txt","r")=NULL)printf(" 对不起没有相应的信息,请您建立!n");printf(" 请输入您的用户名(不得多于8 个字符): n");scanf("%s",use0.ADM_usename);printf(" 请输入您的密码:n");while(pswordi=getchar()!='n'|(pswordi=getchar()!=EOF|i<6)putc

32、har('*');i+;strcmp(use0.ADM_psword,psword);save(A_FLAG,N);/save the infomain_menu();elsecheck(A_FLAG);fclose(fp);/*/*/*/管理员相关函数#ifndef _ADM_nextmenu_c#define _ADM_nextmenu_c#include<stdio.h>#include<string.h>#include<stdlib.h>#include"head.h"struct list_head *post

33、ion;void adm_nextmenu()int ch;system("clear");gettime();printf("tttt*n");printf("nntt#n");printf("tt=1.更改学生信息=n");printf("tt=2.更改老师信息=n");printf("tt=3.更改自己信息=n");printf("tt=4.返回主菜单=n");printf("tt#nn");printf(" 请输入您选

34、择的代号:");scanf("%d",&ch);switch(ch)case 1:a_updt_stuinfo();break;case 2: a_updt_tecinfo();break;case 3: a_updt_myinfo();break;case 4: printf(" 按 Enter 键返回主菜单!n");getchar();getchar();main_menu();break;default:printf("error!n");getchar();getchar();main_menu();/upd

35、ate infovoid a_updt_stuinfo()int ch;system("clear");gettime();printf("tttt*n");printf("nntt#n");printf("tt=1.添加学生信息=n");printf("tt=2.删除学生信息=n");printf("tt=3.查找学生信息=n");printf("tt=4.修改学生信息=n");printf("tt=5.返回上一级菜单=n");pri

36、ntf("tt#nn");printf(" 请输入您选择的代号:");scanf("%d",&ch);switch(ch)case 1: a_add_stuinfo();break;case 2: a_del_info(S_FLAG);break;case 3: a_seek_stuinfo();break;case 4: a_mdify_info(S_FLAG);break;case 5: save(S_FLAG,N);printf(" 按 Enter 返回上一级菜单!n");getchar();getc

37、har();adm_nextmenu();break;default:printf("error!n");getchar();getchar();main_menu();/update infovoid a_updt_tecinfo()int ch;system("clear");gettime();printf("tttt*n");printf("nntt#n");printf("tt=1.添加老师信息=n");printf("tt=2.删除老师信息=n");printf(

38、"tt=3.查找老师信息=n");printf("tt=4.修改老师信息=n");printf("tt=5.返回上一级菜单=n");printf("tt#nn");printf(" 请输入您选择的代号:");scanf("%d",&ch);switch(ch)case 1: a_add_tecinfo();break;case 2: a_del_info(T_FLAG);break;case 3: a_seek_tecinfo();break;case 4: a_md

39、ify_info(T_FLAG);break;case 5:save(T_FLAG,N);printf(" 按 Enter 返回上一级菜单!n");getchar();getchar();adm_nextmenu();break;default:printf("error!n");getchar();getchar();main_menu();/change psword for admvoid a_updt_myinfo()int ch;system("clear");gettime();printf("tttt*n&qu

40、ot;);printf("nntt#n");printf("tt=1.修改密码=n");printf("tt=n");printf("tt=n");printf("tt=2.返回上一级=n");printf("tt=3.返回主菜单=n");printf("tt#nn");printf(" 请输入您选择的代号:");scanf("%d",&ch);switch(ch)case 1:a_chpsword();ge

41、ttime();break;case 2:printf(" 按 Enter 键返回上一级菜单!n");getchar();getchar();adm_nextmenu();break;case 3:printf(" 按 Enter 返回主菜单!n");getchar();getchar();main_menu();break;default:printf("error!n");getchar();getchar();main_menu();void a_add_stuinfo()gettime();STU *stud;int i =

42、0;int stu_nu = 0;FILE *fp=NULL;int j=0;printf(" 您要创建多少个学生的信息:n");scanf("%d",&stu_nu);while(i<stu_nu)stud=(STU*)malloc(sizeof(STU);strcpy(stud->STU_psword,"000");/ 初始密码为000for(j=0;j<3;j+)strcpy(stud->subjecti.SUB_csname),"");(stud->subjecti).

43、SUB_csscore=0;(stud->subjecti).SUB_notesi=0.0;printf(" 输入第 %d 个学生的信息:n",i+1);printf(" 学生姓名 :n");scanf("%s",stud->STU_name);printf(" 学号: n");scanf("%d",&stud->STU_id);printf(" 年龄: n");scanf("%d",&stud->STU_age);

44、printf(" 年级: n");scanf("%d",&stud->STU_grade);i+;list_add(&(stud->list),&stu);stu_sort();show(S_FLAG);void a_add_tecinfo()gettime();TEC *tech;TEC *point=NULL;int i = 0;int tech_nu = 0;FILE *fp=NULL;printf(" 您要创建多少个老师的信息:n");scanf("%d",&tech_nu);while(i<tech_nu)tech=(TEC*)malloc(sizeof(TEC);strcpy(tech->TCH_psword,"000");/初始密码为000printf(" 输入第 %d 个老师的信息:n",i+1);printf(" 姓名 :n");scanf("%s",tech->TCH_name);printf(" 工号: n");scanf("%d"

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论