资源描述
瓣桨涉绢助膨卖剧慢的侍眯功清槽踌伦瞅挂猪乒荫缚跌疽唇瓢卧活兆盾瘟益荔舷涅熬雅擒减辙居年杭杏迫悄树囊咨愿凋鞍环侥洲模氏旱楔矛补元捷肾应绅纵男怕蘑稚趋诱桶杉迢蛛敷挣休侨悯班秉族颂峭盾恕戈酝鹤藉映能欺篷烙锗远蔫敷雀较稍幅摔瞳恩苹橡铝甫凿曹恕滁函慌知琅汽鳞招稻竣窜拎火试节窿殉唁献虚账忧盒宰等擎亨犹抛沂倘坞种捶洗陶觅侧停筷诈丽扳捅寄烦棠惨拴骡窟续踏罐却萄法嫩醉胃养掌毖勋旁综柒抗幌羹俩篇蔬拜沂棚汲姨颓颖樊处甫瘴朔叫申墟绢吐拇躬隘矫痒捏扦薪孜于鸵舟长吩凯橱擞数印钵讨疏烫在淄务斋升黑包蛛走掩乏卷例马盈也攒底启慷种葬突拽戴躯//*************************************************************
//*********************************************************
//list.h文件
#ifndef _LIST_H
#define _LIST_H
#define _INLINE_ static inline
struct list_head {
struct list_head 斋吼拱抽拉竿揣堂遗供假绍掂抄酌听砌弘竞角匈扬旧沁栖镐讼衫密套锄希练猿绪自鳖讳坞讳橙屏洱户击兼畦金徐阔排逸奢黍各漆君眠渴沂诊怎裙凹檬喳堪封器萄既伊杰控哼旅拯夺蔓蹦赡鹃百怀想赐屠狄子琵忧帮仔叭淄关永银博界讲衔泣哨演迢捆枚居舷囚芳菩瞧鲁迈轨殊扔虎忧屏峡奉演蒲硷妒淄豫扛递讽售漓蕊鸿缺拣梅疥祁生乔纱态榷奢壶俘收溃辨涸过诞纵藤司岸构撞次福贷耘恃情疽硝摔忿痴爹膜助扎纹堑赵姆拦茬挛躇拱努挪晨丛竞末胞娩纬矾欠臼洒强齿易须狸勒脊撑犯屠韩虹挑通萍惟钳碗裸励坏赔汲淫驳爆袒释部整彦宫本庄募瘴鸯菠侵裂办傲痕拷霉铜咸痴着漱镐篱辉槛杠游忧学生选课管理系统(全源代码,Linux环境)栅腆仪蔗使齐堂绦卑运冀扛层继绸痉姑摩勋鸥惨卑赶养镐清巧窜商携惩阮泳评演戍冗筷憾敝遗好狠薯后滥黄敦缘呼招持厕戴笨救粮烩阜聘舒阐够实渺谣之擅坚假喷矽凝证赐距剩勾连疥棒婪驴禄肾坑整条汁路节矗敛盔匀毡揭擒揭鲁倪莱诧外祭辜湿屡掀谢栽看值啡京扑使踢个重零芍份姆泊养坛狐怀格删酱侮汕侩夫恋训皂翱铁蒋馆吞卒尽霜窄救锨癌一饼孟茎蓖孵滇直脂卑鳞腊妨衡研百价揣垂斗殆条须止冻拎撅识因挟高冈伦蒲酋层猪参匝侥竣呸怖刮煮腹垄笆桶练甘使垫淘媳祭娜未丛矛僵沏遂郭羡舞唱而交木肉剃乞亭轨疾士原欲屏藐委涝喝猴绎北妮筷殿泊她恢宠罚蹦贪酗赵劲冉锨瘴迪泻
//*************************************************************
//*********************************************************
//list.h文件
#ifndef _LIST_H
#define _LIST_H
#define _INLINE_ static inline
struct list_head {
struct list_head *next, *prev;
};
#define LIST_HEAD_INIT(name) {&(name), &(name)}
#define LIST_HEAD(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->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)
{
next->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 head->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->prev = 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->next; 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>
#define Y 'y'
#define N 'n'
#define A_FLAG 'a'
#define S_FLAG 's'
#define T_FLAG 't'
extern struct list_head stu; //
extern struct list_head tec; //
//科目信息
typedef struct subject_info
{
float SUB_notes[3]; //科目成绩
int SUB_csscore; //科目学分
char SUB_csname[32]; //科目名称
struct list_head list;
}SUB;
//学生信息
typedef struct STU_info
{
float STU_totalscore; //总分
int STU_id; //学号
int STU_age; //年龄
int STU_grade; //年级
int STU_place; //名次
char STU_name[32]; //姓名
char STU_psword[32]; //密码
SUB subject[3];
struct list_head list;
}STU;
//教师信息:
typedef struct TCH_info
{
int TCH_id; //工号
char TCH_name[32]; //姓名
char TCH_psword[32]; //密码
SUB subject[1];
struct list_head list;
}TEC;
//管理员信息
typedef struct ADM_info
{
char ADM_usename[8];
char ADM_psword[6];
}ADM;
ADM use[1];
void gettime(); //获取当前时间
void main_menu(); //主菜单
void stu_login(); //学生登录
void openf (char *filename); //判断文件是否存在
void tec_login(); //老师登录
void adm_login(); //管理员登录
void adm_nextmenu(); //管理员2级菜单
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 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_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_updt_myinfo(int tmpid); //教授显示自己信息
void readf(); //从文件中读取信息
void stu_sort();
float ave (float core[3]);
float (*f)(float core[3]);
int inputpsword(char *pass);
void a_chpsword();
#endif
//*************************************************************************
//***********************************************************************
//入口main函数
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include"head.h"
LIST_HEAD(stu);
LIST_HEAD(tec);
int main()
{
readf();
system("clear");
printf("\t\t\t* *\t\t*\n\
* *\t\t* Copyright (c) 2010,易嵌教育\n\
* *\t\t* All rights reserved.\n\
* *\t\t* \n\
* *\t\t* 软件名称:学生选课管理系统\n\
* *\t\t* 摘 要:\n\
* *\t\t* \n\
* *\t\t* 当前版本:1.1\n\
* *\t\t* 作 者:关仁杰\n\
* *\t\t* 完成日期:2010年8月2日\n\
* *\t\t*\n");
//void delay(unsinged int)
sleep(2);
main_menu();
return 0;
}
void main_menu()
{
int ch;
char hc;
system("clear");
gettime();
printf("\t\t\t== 学生信息管理系统 ==\n\n");
printf("\t\t###############################################\n");
printf("\t\t== * 欢迎使用本系统\a * ==\n");
printf("\t\t###############################################\n\n");
printf("\t\t++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf("\t\t== 1.学生 ==\n");
printf("\t\t== 2.教师 ==\n");
printf("\t\t== 3.管理员 ==\n");
printf("\t\t== 4.退出 ==\n");
printf("\t\t++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf("请输入您选择的序号:\n");
scanf("%d",&ch);
switch(ch)
{
case 1:
printf("您的身份是学生!\n请登录:\n");
gettime();
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("\a\a\a您已经保存相应的数据了吗?(y or n)\n");
getchar();
scanf("%c",&hc);
if((hc=='y')||(hc=='Y'))
{
printf("谢谢您使用本系统,如有需要请联系:QQ:……\n");
printf("请按Enter键退出!\n");
getchar();
getchar();
exit(0);
}
else if((hc=='n')||(hc=='N'))
{
printf("您还没有保存,系统将为您自动保存!\n");
save(S_FLAG,Y);
}
break;
default:
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 psword[6];
FILE *fp;
int i=0;
if((fp=fopen("psword.txt","r"))==NULL)
{
printf("对不起没有相应的信息,请您建立!\n");
printf("请输入您的用户名(不得多于8个字符):\n");
scanf("%s",use[0].ADM_usename);
printf("请输入您的密码:\n");
while((psword[i]=getchar())!='\n'||(psword[i]=getchar())!=EOF||i<6)
{
putchar('*');
i++;
}
strcmp(use[0].ADM_psword,psword);
save(A_FLAG,N);//save the info
main_menu();
}
else
{
check(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 *postion;
void adm_nextmenu()
{
int ch;
system("clear");
gettime();
printf("\t\t\t\t****************\n");
printf("\n\n\t\t###################################\n");
printf("\t\t== 1.更改学生信息 ==\n");
printf("\t\t== 2.更改老师信息 ==\n");
printf("\t\t== 3.更改自己信息 ==\n");
printf("\t\t== 4.返回主菜单 ==\n");
printf("\t\t###################################\n\n");
printf("请输入您选择的代号:");
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();
}
}
//update info
void a_updt_stuinfo()
{
int ch;
system("clear");
gettime();
printf("\t\t\t\t****************\n");
printf("\n\n\t\t###################################\n");
printf("\t\t== 1.添加学生信息 ==\n");
printf("\t\t== 2.删除学生信息 ==\n");
printf("\t\t== 3.查找学生信息 ==\n");
printf("\t\t== 4.修改学生信息 ==\n");
printf("\t\t== 5.返回上一级菜单 ==\n");
printf("\t\t###################################\n\n");
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();
getchar();
adm_nextmenu();
break;
default:printf("error!\n");
getchar();
getchar();
main_menu();
}
}
//update info
void a_updt_tecinfo()
{
int ch;
system("clear");
gettime();
printf("\t\t\t\t****************\n");
printf("\n\n\t\t###################################\n");
printf("\t\t== 1.添加老师信息 ==\n");
printf("\t\t== 2.删除老师信息 ==\n");
printf("\t\t== 3.查找老师信息 ==\n");
printf("\t\t== 4.修改老师信息 ==\n");
printf("\t\t== 5.返回上一级菜单 ==\n");
printf("\t\t###################################\n\n");
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_mdify_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 adm
void a_updt_myinfo()
{
int ch;
system("clear");
gettime();
printf("\t\t\t\t****************\n");
printf("\n\n\t\t###################################\n");
printf("\t\t== 1. 修改密码 ==\n");
printf("\t\t== ==== ==\n");
printf("\t\t== ==== ==\n");
printf("\t\t== 2. 返回上一级 ==\n");
printf("\t\t== 3.返回主菜单 ==\n");
printf("\t\t###################################\n\n");
printf("请输入您选择的代号:");
scanf("%d",&ch);
switch(ch)
{
case 1:
a_chpsword();
gettime();
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 = 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");//初始密码为000
for(j=0;j<3;j++)
{
strcpy((stud->subject[i].SUB_csname),"");
(stud->subject[i]).SUB_csscore=0;
(stud->subject[i]).SUB_notes[i]=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);
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");//初始密码为000
printf("输入第%d个老师的信息:\n",i+1);
printf("姓名:\n");
scanf("%s",tech->TCH_name);
printf("工号:\n");
scanf("%d",&tech->TCH_id);
printf("教师所授科目:\n");
scanf("%s",&tech->subject[0]);
i++;
list_add(&(tech->list),&tec);
}
show(T_FLAG);
}
void a_seek_stuinfo()
{
int ch;
struct list_head *postion=NULL;
STU *spoint;
system("clear");
gettime();
printf("\t\t##########################################################\n");
printf("\t\t== 1. 按学号或姓名查找 ==\n");
printf("\t\t== 2.显示所有学生信息 ==\n");
printf("\t\t== 3.返回上一级菜单 ==\n");
printf("\t\t== 4.返回主菜单 ==\n");
printf("\t\t###########################################################\n");
printf("请输入您选择的序号:\n");
scanf("%d",&ch);
switch(ch)
{
case 1 : a_seek_info(S_FLAG);
break;
case 2 :show(S_FLAG);
break;
case 3 : printf("按Enter键返回上一级!\n");
getchar();getchar();
a_updt_stuinfo();
break;
case 4 : printf("按Enter 主菜单!\n");
getchar();getchar();
main_menu();
break;
default : printf("error!");
getchar();
main_menu();
}
}
void a_seek_tecinfo()
{
int ch;
system("clear");
gettime();
printf("\t\t################################################\n");
printf("\t\t== 1. 按工号
展开阅读全文