C语言课程设计报告——教务管理系统
- 格式:doc
- 大小:363.50 KB
- 文档页数:68
C语言学生管理系统课程设计报告1. 引言学生管理系统是一项常见的计算机应用程序,广泛应用于学校、培训机构等教育机构中。
本文将介绍一个基于C语言开发的学生管理系统,该系统具有以下功能:学生信息的录入、查询、修改和删除,以及成绩信息的录入、查询、统计和排序。
2. 系统设计2.1 功能模块学生管理系统主要包括以下功能模块:•学生信息录入模块:用于录入学生的基本信息,包括学号、姓名、性别、年龄等。
•学生信息查询模块:提供根据学号或姓名查询学生信息的功能。
•学生信息修改模块:允许修改学生的各项信息。
•学生信息删除模块:提供学生信息的删除功能。
•成绩信息录入模块:用于录入学生的成绩信息,包括科目和成绩。
•成绩信息查询模块:提供根据学号或科目查询学生成绩的功能。
•成绩统计模块:对学生的成绩进行统计,包括总分和平均分。
•成绩排序模块:按照总分对学生进行排序。
2.2 数据结构学生信息和成绩信息可以使用结构体存储。
定义如下:typedef struct {char id[20]; // 学生学号char name[20]; // 学生姓名char gender[5]; // 学生性别int age; // 学生年龄} Student;typedef struct {char id[20]; // 学生学号char subject[20]; // 科目float score; // 成绩} Score;通过结构体数组来存储多个学生的信息和成绩,如下所示:Student students[MAX_STUDENT_NUM];Score scores[MAX_SCORE_NUM];2.3 系统流程学生管理系统的流程图如下所示:graph LRA[学生信息录入] --> B[学生信息查询]A --> C[学生信息修改]A --> D[学生信息删除]A --> E[成绩信息录入]A --> F[成绩信息查询]A --> G[成绩统计]A --> H[成绩排序]3. 系统实现在C语言中,使用函数来实现不同的功能模块。
C语言学生管理系统课程设计报告一、引言学生管理系统是一种用来管理学生信息的软件系统。
C语言学生管理系统课程设计旨在帮助学生掌握C语言的基本语法和编程能力,同时熟悉软件开发过程中的分析、设计和实现等环节。
本报告将详细介绍C语言学生管理系统的设计和实现过程。
二、需求分析为了明确系统的功能需求,在进行系统设计之前,我们需要进行需求分析。
对于一个学生管理系统,常见的功能包括学生信息录入、查找学生信息、修改学生信息和删除学生信息等。
2.1 学生信息录入学生信息录入是系统的基本功能之一。
管理员可以通过系统按照一定的格式输入学生的基本信息,包括学号、姓名、性别、年龄、班级等。
2.2 查找学生信息系统应提供根据学号或姓名快速查找学生信息的功能。
用户可以输入学号或姓名进行查询,并显示该学生的详细信息。
2.3 修改学生信息管理员可以通过系统修改学生的基本信息。
用户可以选择指定要修改的学生的学号,并对学生的姓名、班级、年龄等信息进行修改。
2.4 删除学生信息管理员可以通过系统删除指定学生的信息。
用户可以输入学号或姓名进行查询,并选择删除该学生的信息。
三、系统设计在需求分析的基础上,进行系统设计是为了明确系统的整体架构和各个模块之间的关系。
本章将对C语言学生管理系统的设计进行详细介绍。
3.1 系统架构C语言学生管理系统采用单层架构,将所有功能模块整合在一个程序中。
系统采用面向过程的设计思路,通过函数的调用和参数传递实现不同模块之间的交互。
3.2 数据结构设计系统的核心数据结构是学生信息结构体。
学生信息结构体包括学号、姓名、性别、年龄、班级等字段。
为了方便管理学生的信息,可以使用链表来存储学生信息。
链表的每个节点代表一个学生,通过指针连接起来形成一个链表。
3.3 模块设计系统的功能可以划分为若干个模块,包括学生信息录入模块、查找学生信息模块、修改学生信息模块和删除学生信息模块。
3.3.1 学生信息录入模块学生信息录入模块通过从键盘读取用户输入的信息,并将输入的信息保存到链表中。
教务管理系统c语言课程设计一、教学目标本课程的教学目标是使学生掌握教务管理系统的基本原理和设计方法,能够运用C语言进行简单的教务管理系统开发。
具体分为以下三个部分:1.知识目标:使学生掌握C语言的基本语法、数据结构、算法和面向对象编程思想,了解教务管理系统的功能和结构。
2.技能目标:培养学生具备运用C语言进行程序设计的能力,能够独立完成简单的教务管理系统模块设计与实现。
3.情感态度价值观目标:培养学生对编程事业的热爱,提高学生解决实际问题的积极性,培养学生的团队协作精神和自主学习能力。
二、教学内容本课程的教学内容主要包括以下几个部分:1.C语言基础知识:数据类型、运算符、表达式、语句、函数等。
2.数据结构:数组、链表、栈、队列、树、图等。
3.算法:排序算法、查找算法、常用算法分析等。
4.面向对象编程:类、对象、封装、继承、多态等。
5.教务管理系统设计:系统需求分析、系统架构设计、模块划分、功能实现等。
三、教学方法为了达到本课程的教学目标,我们将采用以下几种教学方法:1.讲授法:通过讲解知识点,使学生掌握基本概念和原理。
2.案例分析法:分析实际案例,使学生了解教务管理系统的应用场景和设计方法。
3.实验法:让学生动手编写代码,培养实际编程能力。
4.讨论法:分组讨论问题,培养学生的团队协作精神和解决问题的能力。
四、教学资源为了支持本课程的教学内容和教学方法,我们将准备以下教学资源:1.教材:《C程序设计语言》(K&R)、《C Primer Plus》等。
2.参考书:《数据结构与算法分析》(C语言版)、《深度探索C++对象模型》等。
3.多媒体资料:教学PPT、视频教程、在线编程练习等。
4.实验设备:计算机、网络环境、编程调试工具等。
五、教学评估本课程的评估方式包括以下几个部分:1.平时表现:通过课堂参与、提问、讨论等环节,评估学生的学习态度和积极性。
2.作业:布置课后作业,评估学生的编程能力和对知识的理解程度。
C语言教务管理系统一、程序结构图二、程序运行截图1. 个人信息简介2.修改颜色3.注册界面4. 信息保存至文件5.登录界面6.管理员录入信息7. 学生信息录入8.学生成绩录入9.学生课程表录入10.学生信息查询界面11学生信息查询12.学生成绩查询13.学生课表查询三、代码(一个cpp)#include<stdio.h> #include<stdlib.h> #include<string.h> #include<ctype.h> #include <conio.h>#include"windows.h"#define student_num 1000 /*定义1000个学生*/#define teacher_num 5 /*定义5个老师(管理员)*/int is_my_student(struct student *p,int *size); /*声明返回第i+1个学生的函数*/ int is_my_teacher(struct teacher *p,int *size); /*声明返回第i+1个老师的函数*/ int length_student_name(char *p); /*声明验证用户名函数*/int length_student_password(char *p); /*声明验证密码长度函数*/int length_teacher_name(char *p); /*声明验证用户名函数*/int length_teacher_password(char *p); /*声明验证密码长度函数*/int show_menu_login(); /*声明登录菜单函数*/int show_menu_register(); /*声明注册菜单函数*/int show_teacher_select(); /*声明教师录入菜单函数*/int show_student_select(); /*声明学生查询菜单函数*/int student_register(struct student *ptr_student,int *size); /*声明学生注册函数*/ int teacher_register(struct teacher *ptr_teacher,int *size); /*声明老师注册函数*/ int vaild_student_name(char *p); /*声明验证用户名函数*/int vaild_student_password(char *p); /*声明验证密码函数*/int vaild_teacher_name(char *p); /*声明验证用户名函数*/int vaild_teacher_password(char *p); /*声明验证密码函数*/int vaild_two_password(char *p1,char *p2); /*声明验证两次密码是否相同函数*/ int yes_no_return(); /*声明选择是否返回上一层函数*/void load(); /*声明加载函数*/void register_(int *count1,int *count2); /*声明注册函数*/void display_student(struct student stu); /*声明显示学生信息函数*/void display_teacher(struct teacher tea); /*声明显示老师信息函数*/void student_file1(); /*将保存的学生的账号密码存入文件中*/ void student_file2(); /*将保存的学生的个人信息存入文件中*/ void student_file3(); /*将保存的学生的成绩存入文件中*/void teacher_file(); /*将保存的老师的账号密码存入文件中*/ void input_information(int count); /*声明输入学生信息函数*/void input_score_menu(int count); /*声明输入学生成绩函数*/void color(); /*声明选择窗体颜色函数*/void print_stu_information(int count_stu); /*声明输出账号为num的学生的信息函数*/void print_stu_score(int count_stu); /*声明输出账号为num的学生的成绩函数*/void show_menu(); /*声明初始化界面函数*/void input(); /*声明输入函数*/void menu1(); /*声明教师录入课程表主菜单函数*/void menu2(); /*声明学生查询课程表主菜单函数*/void rank(); /*声明显示时间顺序函数*/void querymenu3(); /*声明查询函数*/void looktime(); /*声明按照时间查询函数*/void looklessonname(); /*声明按照课程名查询函数*/void add(); /*声明保存函数*/void amend(); /*声明修改课程函数*/void amend1(); /*声明修改课程子函数*/void amendnews(int i); /*声明修改整个课程信息函数*/void amendtime(int i); /*声明修改课程时间函数*/void amendlessonname(int i); /*声明修改课程课程名函数*/void amendclassroom(int i); /*声明修改课程教室函数*/void deleted(); /*声明删除函数*/void add_score(int count); /*声明添加学生成绩函数*/void xiugai_score(int count); /*声明修改学生成绩函数*/void shanchu_score(int count); /*声明删除学生成绩函数*/void chaxun_score(int count); /*声明按要求查询学生成绩函数*/void paixu_score(int count); /*声明学生成绩排序函数*/void tongji_score(int count); /*声明学生成绩统计函数*/float chinese(int count); /*声明计算语文成绩最大值函数*/int chr(int count); /*声明计算语文成绩及格人数的函数*/ float english(int count); /*声明计算英语成绩最大值函数*/int ehr(int count); /*声明计算英语成绩及格人数的函数*/ float math(int count); /*声明计算数学成绩最大值函数*/int mhr(int count); /*声明计算数学成绩及格人数的函数*/ float computer(int count); /*声明计算计算机成绩最大值函数*/int thr(int count); /*声明计算计算机成绩及格人数的函数*/float PE(int count); /*声明计算体育成绩最大值函数*/int phr(int count); /*声明计算体育成绩及格人数的函数*/ float sum_score(int count); /*声明计算总分成绩最大值函数*/ void load_student(int a); /*声明启动学生函数*/void load_teacher(int a); /*声明启动老师函数*/struct student /*学生结构体*/{/*个人信息*/int student_id; /*账号*/char student_name[20]; /*姓名*/char password[16]; /*密码*/int age; /*年龄*/char qq[12]; /*QQ号*/char tel[12]; /*电话*/int grade; /*年级*//*各科成绩*/float chinese; /*语文分数*/float english; /*英语分数*/float math; /*数学分数*/float computer; /*计算机分数*/float PE; /*体育分数*/float sum; /*总分*//*课程表*/char time[10]; /*时间*/char lessonname[20]; /*课程名*/char teacher[20]; /*授课老师*/char classroom[10]; /*教室*/char hours[10]; /*第几节课*/int weeks; /*周时*/};struct teacher /*老师结构体*/ {int teacher_id; /*账号*/char teacher_name[20]; /*姓名*/char password[16]; /*密码*/};struct student our_student[student_num]; struct teacher our_teacher[teacher_num];void main() /*主函数*/{system("color f0"); /*初始化背景颜色*/show_menu(); /*制作人信息简介*/load();}void load() /*启动函数*/{int flag=1; /*控制循环结束的变量*/int a=0,b=0; /*记录已注册的学生的人数a为学生个数b为老师个数*/int *count1=&a,*count2=&b; /*指向学生人数和老师人数的指针*/int correct_student,correct_teacher;color();register_(count1,count2); /*注册学生和老师的帐号*/student_file1();teacher_file();while(flag){switch(show_menu_login()) /*显示登录菜单*/{case 1: /*选择1,进入学生登录*/if(correct_student=is_my_student(our_student,count1)){printf("\n ◆学生登录成功!\n");display_student(our_student[correct_student-1]);printf("\n");printf(" ");system("pause");load_student(a);}elseprintf("\n登录失败!\n");printf("\n");printf(" 提示:按Y退出登录界面,按N返回登录界面!!!\n");flag=yes_no_return();system("cls");break;case 2: /*选择2,进入老师登录,即管理员登录*/ if(correct_teacher=is_my_teacher(our_teacher,count2)){printf("\n ◆管理员登录成功!\n");display_teacher(our_teacher[correct_teacher-1]);printf("\n");printf(" ");system("pause");load_teacher(a);}elseprintf("\n登录失败!\n");printf("\n");printf(" 提示:按Y退出登录界面,按N返回登录界面!!!\n");flag=yes_no_return();system("cls");break;case 3: /*选择3,退出登录*/system("cls");flag=0;break;default:printf("请正确输入1-3:");system("cls");}}}void load_student(int a) /*启动学生函数*/{int flag=1;system("cls");while(flag){switch(show_student_select()){case 1: /*选择1,学生信息查询*/system("cls");print_stu_information(a);printf("\n");printf(" 提示:按Y退出学生查询界面,按N返回学生查询界面!!!\n");flag=yes_no_return();system("cls");break;case 2: /*选择2,学生成绩查询*/system("cls");print_stu_score(a);printf("\n");printf(" 提示:按Y退出学生查询界面,按N返回学生查询界面!!!\n");flag=yes_no_return();system("cls");break;case 3: /*选择3,学生课表查询*/menu2();printf(" 提示:按Y退出学生查询界面,按N返回学生查询界面!!!\n");flag=yes_no_return();system("cls");break;case 4: /*选择4,退出查询界面*/system("cls");flag=0;break;default:printf("请正确输入1-4:");system("cls");}}}void load_teacher(int a) /*启动老师函数*/{int flag=1;system("cls");while(flag){switch(show_teacher_select()){case 1: /*选择1,学生信息录入*/input_information(a);system("cls");student_file2();printf("\n 提示:按Y退出教师录入界面,按N返回教师录入界面!!!\n");flag=yes_no_return();system("cls");break;case 2: /*选择2,学生成绩录入*/input_score_menu(a);system("cls");student_file3();printf("\n 提示:按Y退出教师录入界面,按N返回教师录入界面!!!\n");flag=yes_no_return();system("cls");break;case 3: /*选择3,学生课表录入*/menu1();printf(" 提示:按Y退出教师录入界面,按N返回教师录入界面!!!\n");flag=yes_no_return();system("cls");break;case 4: /*选择4,退出管理界面*/system("cls");flag=0;break;default:printf("请正确输入1-4:");system("cls");}}}int length_student_name(char *p) /*验证用户名是否合法*/ {int l;l=strlen(p);if(l>20||l<1)return 0;elsereturn 1;}int vaild_student_name(char *p) /*判断用户名是否有效*/{int i=0;int len=strlen(p);if((*p>='a'&&*p<='z')||(*p>='A'&&*p<='Z')) /*判断首字母是不是字母*/ {for(i=0;i<len;i++){if(!(p[i]='_'||(p[i]>='a'&&p[i]<='z')||(p[i]>='A'&&p[i]<='Z')||(p[i]>='0'&&p[i]<=' 9'))) /*判断后面的字符是否有效*/return 0;}return 1;}elsereturn 0;}int length_student_password(char *p) /*密码长度有效性验证*/{int len;len=strlen(p);if(len<6||len>16)return 0;elsereturn 1;}int vaild_student_password(char *p) /*密码的有效性验证*/{int i=0;for(;*p!='\0';p++){if(!((*p>='a'&&*p<='z')||(*p>'A'&&*p<'Z')||(*p>='0'&&*p<='9'))) return 0;}return 1;}int vaild_two_password(char *p1,char *p2) /*验证两次密码是否相同*/{if(strcmp(p1,p2)==0)return 1;elsereturn 0;}int student_register(struct student *ptr_student,int *size) /*完成注册功能*/{char password[16];char repassword[16];if(*size==student_num){puts(" ◆注册人数已满!");printf("\n");return 0;}system("cls");printf("\n\n");printf(" ★请输入注册学生姓名:");fflush(stdin);gets(ptr_student[*size].student_name);if(!(length_student_name(ptr_student[*size].student_name)&&vaild_student_name(ptr_student[*size].student_name))){printf(" ◆您输入的姓名无效,学生姓名在1-20之间,首字符为字母,后面必须为字母、数字或下划线!!!");return 0;}printf("\n");printf(" ★请输入注册密码:");fflush(stdin);gets(password);printf("\n");printf(" ★请再次输入注册密码:");fflush(stdin);gets(repassword);printf("\n");if(!vaild_two_password(password,repassword)){printf("\n №:两次输入的密码不一致!!!");printf("\n");return 0;}elsestrcpy(ptr_student[*size].password,password);if(!(length_student_password(ptr_student[*size].password)&&vaild_student_pa ssword(ptr_student[*size].password))){printf(" ◆您输入的密码无效,密码应在6-16位之间,密码只能包含字母和数字!!!");printf("\n");return 0;}printf(" ★您的编号为:%d,这将是您的登录账号!!!",ptr_student[*size].student_id=20150000+*size);return 1;}int is_my_student(struct student *p,int *size) /*如果登录成功则返回第i+1个学生的信息,否则返回0*/{int i;int zhanghao;char mima[18];system("cls");printf("\n\n");printf(" ★请输入您的账号:");scanf("%d",&zhanghao);fflush(stdin);printf("\n");printf(" ★请输入您的密码:");gets(mima);for(i=0;i<*size;i++){if((zhanghao==p[i].student_id)&&(strcmp(mima,p[i].password)==0)) return i+1;}return 0;}void display_student(struct student stu) /*显示学生信息*/{printf("\n ★您的账号是:%d\n",stu.student_id);}int length_teacher_name(char *p) /*验证用户名是否合法*/{int l;l=strlen(p);if(l>20||l<1)return 0;elsereturn 1;}int vaild_teacher_name(char *p) /*判断用户名是否有效*/{int i=0;int len=strlen(p);if((*p>='a'&&*p<='z')||(*p>='A'&&*p<='Z')) /*判断首字母是不是字母*/ {for(i=0;i<len;i++){if(!(p[i]='_'||(p[i]>='a'&&p[i]<='z')||(p[i]>='A'&&p[i]<='Z')||(p[i]>='0'&&p[i]<=' 9'))) /*判断后面的字符是否有效*/return 0;}return 1;}elsereturn 0;}int length_teacher_password(char *p) /*密码长度有效性验证*/{int len;len=strlen(p);if(len<6||len>16)return 0;elsereturn 1;}int vaild_teacher_password(char *p) /*密码的有效性验证*/{int i=0;for(;*p!='\0';p++){if(!((*p>='a'&&*p<='z')||(*p>'A'&&*p<'Z')||(*p>='0'&&*p<='9'))) return 0;}return 1;}int teacher_register(struct teacher *ptr_teacher,int *size) /*完成注册功能*/{char password[16];char repassword[16];if(*size==teacher_num){puts(" ◆注册人数已满!");printf("\n");return 0;}system("cls");printf("\n\n");printf(" ★请输入注册教师姓名:");fflush(stdin);gets(ptr_teacher[*size].teacher_name);if(!(length_teacher_name(ptr_teacher[*size].teacher_name)&&vaild_teacher_na me(ptr_teacher[*size].teacher_name))){printf(" ◆您输入的姓名无效,教师姓名在1-20之间,首字符为字母,后面必须为字母、数字或下划线!!!");printf("\n");return 0;}printf("\n");printf(" ★请输入注册密码:");fflush(stdin);gets(password);printf("\n");printf(" ★请再次输入注册密码:");fflush(stdin);gets(repassword);printf("\n");if(!vaild_two_password(password,repassword)){printf("\n №:两次输入的密码不一致!!!");printf("\n");return 0;}elsestrcpy(ptr_teacher[*size].password,password);if(!(length_teacher_password(ptr_teacher[*size].password)&&vaild_teacher_password(ptr_teacher[*size].password))){printf(" ◆您输入的密码无效,密码应在6-16位之间,密码只能包含字母和数字!!!");printf("\n");return 0;}printf(" ★您的编号为:%d,这将是您的登录账号。
c语言学生管理系统课程设计报告(一)C语言学生管理系统课程设计报告1. 项目介绍•课程名称:C语言学生管理系统课程设计•项目类型:学生管理系统•设计时间:2021年1月•设计人员:XXX2. 项目背景•学生管理系统是一种常见的信息管理系统,用于管理学校、学院或班级的学生信息。
•C语言是一种常用的编程语言,具有良好的跨平台性和高效性。
3. 功能需求设计一个C语言学生管理系统,能够实现以下功能:•学生信息录入:输入学生的基本信息,包括学号、姓名、性别、年龄等。
•学生信息查询:根据学号或姓名查询学生的基本信息。
•学生成绩录入:输入学生的各科成绩,包括语文、数学、英语等。
•学生成绩统计:计算学生的总成绩、平均成绩,并根据成绩进行排名。
•学生信息修改:对已有的学生信息进行修改,包括基本信息和成绩信息。
•学生信息删除:根据学号或姓名删除学生的信息。
4. 技术实现在C语言学生管理系统的设计中,使用到以下技术:•结构体:用于定义学生的基本信息,如学号、姓名、性别、年龄等。
•数组:用于存储多个学生的信息。
•文件读写:将学生信息保存到文件中,实现信息的长久保存和读取。
5. 项目结构•主函数:包括用户菜单的选择和对应功能的调用。
•学生信息模块:实现学生信息的录入、查询、修改和删除等功能。
•成绩管理模块:实现学生成绩的录入、统计等功能。
6. 开发流程•需求分析:明确项目需求,确定功能设计。
•系统设计:设计程序的整体结构,划分模块和函数。
•编码实现:使用C语言编写各个模块的代码,并进行调试测试。
•系统测试:对系统进行整体测试,修复错误和漏洞。
•系统部署:将系统部署到目标环境中,进行性能优化和问题排查。
•用户培训:对系统进行使用说明和培训,保证用户能够熟练使用学生管理系统。
7. 总结与展望通过C语言学生管理系统的设计,我学到了很多关于C语言的基础知识和编程技巧。
在项目开发过程中,我充分利用了C语言的特点,编写出高效、稳定的代码。
c语言课程设计学生学籍管理系统一、教学目标本课程旨在让学生掌握C语言的基本语法,培养学生编写结构化程序的能力,使学生能够运用C语言实现简单的学生学籍管理系统。
通过本课程的学习,学生将能够:1.知识目标:–理解C语言的基本数据类型、运算符和表达式;–掌握函数的定义和调用,理解局部变量和全局变量的概念;–熟悉控制结构,如if语句、for循环和while循环;–了解数组、字符串和指针的基本使用方法。
2.技能目标:–能够使用C语言编写简单的程序,解决实际问题;–掌握基本的调试技巧,能够找出并修复程序中的错误;–具备阅读和理解他人代码的能力。
3.情感态度价值观目标:–培养学生对计算机科学的兴趣和热情,提高学生的自主学习能力;–培养学生团队协作的精神,增强学生的沟通能力;–培养学生解决问题的能力,提高学生的创新意识。
二、教学内容本课程的教学内容主要包括以下几个部分:1.C语言基本语法:数据类型、运算符、表达式、函数、局部变量和全局变量等;2.控制结构:if语句、for循环、while循环等;3.数据结构:数组、字符串、指针等;4.学生学籍管理系统的实现:学生信息的添加、删除、修改和查询等功能。
三、教学方法本课程采用讲授法、案例分析法和实验法等多种教学方法相结合的方式进行教学:1.讲授法:通过讲解C语言的基本语法和概念,使学生掌握相关知识;2.案例分析法:通过分析实际案例,使学生理解并掌握C语言在学生学籍管理系统中的应用;3.实验法:让学生动手编写代码,实现学生学籍管理系统的功能,提高学生的实际操作能力。
四、教学资源本课程的教学资源包括:1.教材:《C语言程序设计》;2.参考书:《C语言 Primer》;3.多媒体资料:教学PPT、视频教程等;4.实验设备:计算机、网络等。
以上教学资源将有助于实现本课程的教学目标,提高学生的学习效果。
五、教学评估本课程的教学评估将采用多元化评价方式,全面客观地评价学生的学习成果。
教室管理系统c语言课程设计一、课程目标知识目标:1. 学生能掌握C语言中结构体、数组、函数等基本概念,并能运用这些知识设计教室管理系统的基本框架。
2. 学生能理解文件操作在教室管理系统中的应用,掌握文件的读写、存储等基本操作。
3. 学生了解教室管理系统的需求分析、功能模块划分,掌握模块化编程思想。
技能目标:1. 学生能够运用C语言编写程序,实现教室管理系统的各项功能,如添加、删除、查询教室信息等。
2. 学生能够运用所学知识解决实际编程问题,具备一定的程序调试和优化能力。
3. 学生能够通过本课程的学习,培养自己的团队协作、沟通能力,提高问题解决能力。
情感态度价值观目标:1. 学生通过参与教室管理系统的设计与实现,培养对计算机编程的兴趣和热情,提高学习积极性。
2. 学生在学习过程中,培养严谨、认真、负责的学习态度,树立良好的编程习惯。
3. 学生能够认识到编程在解决实际问题中的重要性,增强对信息技术的信心,提高社会责任感。
本课程针对高中年级学生,结合C语言学科特点,以实用性为导向,旨在培养学生的编程能力、问题解决能力和团队协作能力。
课程目标具体、可衡量,为后续教学设计和评估提供了明确的方向。
二、教学内容本课程教学内容紧密结合课程目标,确保科学性和系统性。
具体包括以下部分:1. C语言基础知识回顾:包括数据类型、运算符、控制语句等,涉及教材第1-3章内容。
2. 结构体与数组:讲解结构体的定义和使用,数组的应用,为教室管理系统设计提供数据结构支持,涉及教材第4章内容。
3. 函数:介绍函数的定义、调用、参数传递等,帮助学生掌握模块化编程思想,涉及教材第5章内容。
4. 文件操作:讲解文件读写、存储等基本操作,为教室管理系统提供数据持久化支持,涉及教材第6章内容。
5. 教室管理系统功能模块设计:- 教室信息添加、删除、修改、查询功能,涉及教材第7章内容;- 教室预约、取消预约功能,涉及教材第8章内容;- 用户登录、权限管理功能,涉及教材第9章内容。
c 教务系统课程设计一、教学目标本课程旨在让学生了解教务系统的功能和结构,掌握教务系统的基本操作,培养学生运用教务系统进行教学管理的能力。
具体目标如下:1.知识目标:使学生了解教务系统的基本概念、功能和结构,理解教务系统在教学管理中的重要性。
2.技能目标:培养学生熟练操作教务系统,进行课程安排、学生管理、成绩统计等教学活动的能力。
3.情感态度价值观目标:培养学生对教务系统的兴趣,认识到教务系统在提高教学管理水平、促进教育教学改革中的作用,树立正确的信息技术应用观念。
二、教学内容1.教务系统概述:介绍教务系统的定义、功能、结构及其在教学管理中的重要性。
2.教务系统操作:讲解教务系统的安装、配置、登录等基本操作,以及课程安排、学生管理、成绩统计等功能的详细操作方法。
3.教务系统管理:阐述教务系统在教学管理中的应用,如教学计划管理、课程管理、学生管理等。
4.教务系统与教育教学改革:探讨教务系统在教育教学改革中的作用,以及如何利用教务系统提高教学管理水平。
三、教学方法1.讲授法:通过讲解教务系统的概念、功能、操作方法等,使学生掌握基本知识。
2.案例分析法:分析实际教学中运用教务系统的案例,使学生更好地理解教务系统在教学管理中的应用。
3.实验法:安排上机实验,让学生亲自动手操作教务系统,提高实际操作能力。
4.讨论法:学生就教务系统在使用过程中遇到的问题进行讨论,促进学生思考和解决问题。
四、教学资源1.教材:选用内容新颖、实用的教务系统教材,为学生提供理论指导。
2.参考书:推荐相关的教务系统参考书籍,拓展学生的知识视野。
3.多媒体资料:制作教学PPT、视频等多媒体资料,提高课堂教学效果。
4.实验设备:配置足够的计算机等实验设备,保证学生上机实验的需要。
五、教学评估本课程的教学评估采用多元化方式,全面客观地评价学生的学习成果。
评估方式包括:1.平时表现:通过课堂参与、提问、回答问题等环节,评估学生的学习态度和积极性。
C语言学生管理系统课程设计报告总结1. 引言本报告总结了我们小组在C语言课程设计中开发的学生管理系统。
该系统旨在简化学校教务管理过程,提高教务工作效率,实现学生信息的快速查询、管理和统计。
本文将介绍系统的设计目标、主要功能模块以及我们在开发过程中遇到的挑战和解决方案。
2. 设计目标我们设计学生管理系统的主要目标是提供以下功能:•学生信息管理:包括学生基本信息的录入、查找、修改和删除操作。
•课程管理:包括课程信息的录入、查找、修改和删除操作。
•成绩管理:包括成绩录入、查询和统计功能。
•班级管理:包括班级信息的录入、查找、修改和删除操作。
3. 系统设计与实现3.1 数据结构设计为了存储学生信息、课程信息和成绩信息,我们设计了以下数据结构:•学生信息结构体:包含学生姓名、学号、性别、出生日期等字段。
•课程信息结构体:包含课程名称、课程号、学分等字段。
•成绩信息结构体:包含学生姓名、课程名称、分数等字段。
3.2 用户界面设计我们采用命令行界面来实现用户和系统的交互。
通过命令行菜单,用户可以选择不同的功能模块,并输入相应的命令进行操作。
我们通过C语言的输入输出函数来实现用户界面的显示和交互。
3.3 功能模块实现学生管理系统主要包含以下功能模块:•学生信息管理模块:实现学生信息的录入、查找、修改和删除操作。
•课程管理模块:实现课程信息的录入、查找、修改和删除操作。
•成绩管理模块:实现学生成绩的录入、查询和统计功能。
•班级管理模块:实现班级信息的录入、查找、修改和删除操作。
4. 开发过程中的挑战和解决方案在开发学生管理系统的过程中,我们遇到了以下挑战:1.数据存储和管理:如何有效地存储和管理大量的学生信息、课程信息和成绩信息。
我们采用了链表的数据结构来组织数据,通过指针进行关联和操作,以提高数据的访问效率。
2.用户界面设计:如何设计一个简洁、直观的用户界面,方便用户进行操作。
我们借鉴了其他类似系统的设计思路,采用了命令行菜单和命令交互的方式来实现用户界面,简化了用户操作的复杂性。
功能说明:实现两种权限的身份登陆的教务管理系统*/#include "stdio.h"#include "stdlib.h"#include "string.h"#include "time.h"#include "memory.h"#define share "d:\\share.dat" //定义邮件地址#define manager "d:\\manager.dat" //定义管理员邮件地址#define outmsg "d:\\outmsg.dat" //定义公告邮件地址#define logtimemsg "d:\\used login time.dat" //定义用户登录时间信息#define star_stu "d:\\stu_scname.dat" //定义学生起始文件信息#define stu_msg "d:\\stu.dat" //定义学生成绩信息地址#define mass_key "3110008758" //定义文件头部密码typedef struct student stu;#define sc_num 4 //只设定4门科目,不允许改动#define uint unsigned int/*学生成绩管理系统结构*/struct student{char num[10]; /*学生学号*/char name[10]; /*学生姓名*/uint score[sc_num]; /*科目分数*/uint average; /*科目平均分*/stu *next;}st;char gettemp=0;/*管理员身份识别结构*/typedef struct username user;struct username{char username[20];//char password[20];}use;/*时间登录信息*/struct Logtime{char userlogin[20];struct tm;};char logc;//登录次数typedef struct Logtime logtime;//========================================================== //定义通讯协议//==========================================================#define mass_max 200 //定义信息量struct Massage{int cont; //文件数量char username[15]; //发送人char mass[mass_max];//信息}mas;typedef struct Massage massage;//========================================================== //========================================================== char userlogin[10];char sc_name[sc_num][10];/*以上是学生信息*/char welcome(void);/*用户界面,返回0,则表示退出系统*//*==================================================================== 学生信息操作==================================================================== */stu*creat();/*建立链表*/void display(stu *head);/*显示用户信息*/void insert(stu *head);/*增加学生信息*/stu* delname(stu*head,char *stu_name);/*根据学生姓名删除用户信息*/stu* delnum(stu *head,char *stu_num);/*根据学生学号删除用户信息*/stu* checkname(stu *head,char *stu_name);/*输出指定学生的信息*/stu* checknum(stu *head,char *stu_num);/*输出指定学生学号的学生信息*/ void changsc_name(stu *head,char *name);/*修改用户成绩*/void changsc_num(stu *head,char *num);/*修改用户成绩*/void waring(void);/*产生警告信息*/char cheknum(char *num);/*检查学生学号是否符合格式*/char chekname(char *name);/*检查学生姓名是否符合格式*/char chekscore(char score);/*检查学生分数是否符合格式*/stu* sortscore(stu *head);/*学生按平均成绩排序*/stu* sortnum(stu *head);/*学生信息按学号排序*//*==================================================================== 学生用户登录==================================================================== */char stulogin(void);/*进入普通用户登录界面*/char stucheck(char *nam,char *stnum);/*查找是否存在该学生信息*/char newlogin(char *nam,char *stnum);/*注册学生信息*/void disnewst(void);/*获得学生信息*//*==================================================================== 系统管理选择,管理员权限==================================================================== */void stu_system(void);/*对各种操作集中管理*/void sentmsg(void);/*发送公告*/char readmsg(void);/*浏览信息*/char delemsg(void);//删除信息void chagesbject(void);/*修改课程信息*//*==================================================================== 用户登录信息==================================================================== */void setlogintime(void);/*记录用户登录时间*/void dislogintime(void);/*显示用户登录信息*/void setused(void);/*注册新用户资料*/char usedcheckname(char *name);/*用户信息检查,若存在用户,则返回1,否则返回0*/ char usedcheckpass(char *name,char *password);/*查看用户名密码是否符合*//*====================================================================存储操作====================================================================*/char save(stu *head);/*保存用户数据*/char disload();/*显示用户信息*/stu* load(void);/*加载用户数据*/void clrtxt(char *str);/*清除文本信息*/char* creat_txt(char *username);/*根据用户名,创建一个用户文件*/FILE* chekuser(char *username);/*根据用户名,查找是否有此用户信息,若无,返回NULL*/ /*====================================================================---------------main函数----------====================================================================*/void main(){FILE *fp;char i,j;char name[15];system("color b5");memset(name,'\0',sizeof(name));if((fp=fopen(star_stu ,"r+"))==NULL){printf("将新建文件!\n");fp=fopen(star_stu ,"w+");}fread(name,sizeof(name),1,fp);if(strcmp(name,mass_key)!=0){printf("文件载入出错!\t N为退出回车键继续...:");i=getchar();if((i=='n')||(i=='N')){fclose(fp);exit(1);}else{printf("\n\n数据将重新初始化!\n");printf("\n\n请输入4门科目名称\n");memset(name,'\0',sizeof(name));fwrite(name,sizeof(name),5,fp);strcpy(name,mass_key);rewind(fp);fwrite(name,sizeof(name),1,fp);for(i=0;i<sc_num;i++){printf("\n\n第%d门科目名称: ",i+1);scanf("%s",sc_name[i]);if(fwrite(sc_name[i],sizeof(sc_name[i]),1,fp)!=1){printf("\n\n\t\t\t\t保存出错!\n");getchar();exit(1);}}}}else{if(fp==NULL)printf("\n文件错误!");fscanf(fp,"%s%s%s%s",sc_name[0],sc_name[1],sc_name[2],sc_name[3]);}fclose(fp);fp=fopen(share,"w"); //为防止文件在后面打开错误fclose(fp);fp=fopen(manager,"w");fclose(fp);fp=fopen(outmsg,"w");fclose(fp);do{j=welcome();if(j==1){system("cls");printf("\t\t欢迎进入学生用户中心系统!");setlogintime();j=stulogin();}else if(j==2){setlogintime();stu_system();}}while(j!=0);fp=fopen(share,"w"); //为防止文件未关闭,倒置文件内容丢失fclose(fp);fp=fopen(manager,"w");fclose(fp);fp=fopen(outmsg,"w");fclose(fp);fp=fopen(logtimemsg,"w");fclose(fp);fp=fopen(star_stu,"w");fclose(fp);fp=fopen(stu_msg,"w");fclose(fp);}/*====================================================================---------------------------初始化用户界面---------------------------====================================================================*///返回1,则进入stu用户界面//返回0,则表示退出//返回2,则表示进入管理员界面char welcome(void){char username[20];char userpass[20];char i,wrong_cont=0,key=0,weling=1,back=0;char temp;system("color b5");while(weling){do{system("cls");printf("\t*********************欢迎进入教务管理系统********************\n");printf("\t* *\n");printf("\t* 1.用户登录*\n");printf("\t* *\n");printf("\t* 2.用户注册*\n");printf("\t* *\n");printf("\t* 3.管理员登陆*\n"); printf("\t* *\n"); printf("\t* 4.管理员注册*\n"); printf("\t* *\n"); printf("\t* 5.退出系统*\n"); printf("\t* *\n"); printf("\t=============================================================\n"); printf("\t 请按命令提示操作\n"); printf("\n\n\n");printf("\n\n\n");printf("您输入的命令为:\t");i=getchar();if((i!='1')&&(i!='2')&&(i!='3')&&(i!='4')&&(i!='5')){printf("\n输入错误的指令!请按命令提示操作1-3\n");getchar();}}while((i!='1')&&(i!='2')&&(i!='3')&&(i!='4')&&(i!='5'));switch(i){case '1':{system("cls");memset(username,'\0',sizeof(username));memset(userpass,'\0',sizeof(userpass));printf("\n\t请输入用户名:\t");scanf("%s",username);printf("\n\t请输入学号:\t");scanf("%s",userpass);temp=stucheck(username,userpass);if(temp==0){printf("没有学生档案信息!请注册...\n");getchar();break;}else if(temp==1){memset(userlogin,'\0',sizeof(userlogin));strcpy(userlogin,username);printf("\n\t学生成绩登录有效!");getchar();return 1;}getchar();//=======================break;}case '2':{system("cls");memset(username,'\0',sizeof(username));memset(userpass,'\0',sizeof(userpass));printf("\n\t请输入用户名:\t");scanf("%s",username);printf("\n\t请输入学号:\t");scanf("%s",userpass);while(cheknum(userpass)!=1){printf("您的输入格式有误,请重新输入!\n");printf("按回车键继续...\n");getchar();memset(userpass,'\0',sizeof(userpass));printf("\n\t请输入学号:\t");scanf("%s",userpass);}if(newlogin(username,userpass))printf("\n\t注册成功!用户名:%s\t学号:%s",username,userpass);getchar();break;}case '3':{do{system("cls");memset(username,'\0',sizeof(username));memset(userpass,'\0',sizeof(userpass));printf("\n\t请输入用户名:\t");scanf("%s",username);printf("\n\t请输入密码:\t");scanf("%s",userpass);if(usedcheckpass(username,userpass)==0){wrong_cont++;if(wrong_cont==3){printf("\n\t输入次数大于3次!请按回车键退出系统!\n");getchar();weling=0;return 0;}key=1;printf("\n\t按1选择返回主菜单\n\t按0继续输入用户验证码\n");do{back=getchar();if((back!='1')&&(back!='0')){printf("\n\t输入错误!按回车键继续...");getchar();}}while((back!='1')&&(back!='0'));if(back=='1')key=0;}else{key=0;weling =0;system("cls");printf("\n\n\t\t欢迎%s进入学生管理系统\n",username);memset(userlogin,'\0',sizeof(userlogin));strcpy(userlogin,username); //记录用户登录信息return 2;}}while(key);back=0;weling=1;break;return 2;}case '4':{setused();/*注册新管理员资料*/weling=1;break;}case '5':{weling=0;return 0;}}}return 1;}/*==================================================================== ---------------建立链表----------==================================================================== */stu*creat()/*建立链表*/{char i,j;char stu_num;stu *p1, *p2;stu *head;FILE *fp;fp=fopen(stu_msg,"w+");head=(stu*)malloc(sizeof(stu));head->next=NULL;p1=p2=(stu*)malloc(sizeof(stu));i=0,j=0;system("cls");printf("\n\n请输入要录入的学生人数: ");scanf("%d",&stu_num);for(i=0;i<stu_num;i++){system("cls");p1->average=0;printf("\n\n请输入学生学号: ");scanf("%s",p1->num);while(!cheknum(p1->num)){printf("\n\n输入格式错误!请重新输入学号: ");scanf("%s",p1->num);}printf("\n\n请输入学生姓名: ");scanf("%s",p1->name);while(!chekname(p1->name)){printf("\n\n输入格式出错!不能带数字或下划线!\n");printf("\n\n请重新输入学生姓名: ");scanf("%s",p1->name);}do{printf("\n\n请输入学生%s成绩:",sc_name[j]);scanf("%d",&p1->score[j]);while((100<p1->score[j])||(p1->score[j]<0)){printf("\n\n成绩格式出错!\n ");getchar();printf("\n\n请重新输入学生成绩: ");scanf("%d",&p1->score[j]);}p1->average+=p1->score[j];j++;}while(j<sc_num);j=0;p1->average=p1->average/4;if(i==0){head->next=p1; /*分清楚是head->next=p还是head=p*/p2=p1;p1->next=NULL;}else{p2->next=p1;p2=p1;p2->next=NULL; /*产生新的节点*/}fwrite(p1,sizeof(stu),1,fp);p1=(stu*)malloc(sizeof(stu));}display(head);getchar();fclose(fp);return head;}/*====================================================================检查学生学号是否符合格式,若正确,则返回1,否则返回0==================================================================== */char cheknum(char *num)/*检查学生学号是否符合格式*/{char i; /*获取字符串长度*/char j=strlen(num);for(i=0;i<j;i++){if(('0'>num[i])||('9'<num[i])){return 0;exit(1);}}return 1;}/*==================================================================== 检查学生姓名是否符合格式,若正确,则返回1,否则返回0==================================================================== */char chekname(char *name)/*检查学生姓名是否符合格式*/{char i;for(i=0;i<strlen(name);i++){/*if(('A'>name[i])||(('Z'<name[i])&&('a'>name[i]))||('z'<name[i]))/if(name[i]<18){return 0;exit(1);}*/}return 1;}/*==================================================================== 显示学生成绩情况==================================================================== */void display(stu *head)/*显示用户信息*/{stu *p1;char i=0;p1=head->next;system("cls");if(p1!=NULL){while(p1!=NULL){if(i==0){printf("姓名\t学号\t %s\t %s\t %s\t%s\t平均分\n",sc_name[0],sc_name[1],sc_name[2],sc_name[3]);i++;}printf("%s\t%s\t %d\t %d\t%d\t%d\t%d\n",\p1->name,p1->num,p1->score[0],p1->score[1],p1->score[2],p1->score[3],p1->average);p1=p1->next;}getchar();}else{printf("\t\t\t链表为空!\n\n\n请按回车键继续...\n");getchar();}}/*====================================================================插入学生信息====================================================================*/void insert(stu *head)/*增加学生信息*/{stu *p1,*p2;char j=0;p1=head->next;p2=(stu*)malloc(sizeof(stu)); /*创建新的学生信息*/p2->average=0;system("cls");printf("\n\n请输入要增加的学生学号: ");scanf("%s",p2->num);while(!cheknum(p2->num)){printf("\n\n输入格式错误!请重新输入学号: ");scanf("%s",p2->num);}printf("\n\n请输入学生的姓名: ");scanf("%s",p2->name);while(!chekname(p2->name)){printf("\n\n输入格式出错!不能带数字或下划线!\n");printf("\n\n请重新输入学生姓名: ");scanf("%s",p2->name);}do{printf("\n\n请输入学生%s成绩:",sc_name[j]);scanf("%d",&p2->score[j]);while((100<p2->score[j])||(p2->score[j]<0)){printf("\n\n成绩格式出错!\n ");getchar();printf("\n\n请重新输入学生成绩: ");scanf("%d",&p2->score[j]);}p2->average+=p2->score[j];j++;}while(j<sc_num);p2->average=p2->average/4;if(head->next==NULL){printf("\n原链表为空!");getchar();head->next=p2;}else{while(p1->next!=NULL)p1=p1->next;p1->next=p2;p2->next=NULL;}display(head);getchar();}/*====================================================================删除学生信息====================================================================*/stu* delname(stu*head,char *stu_name)/*根据学生姓名删除用户信息*/{stu *p1,*p2;char i,j=0;system("cls");if(head->next==NULL){printf("\n\n没有学生信息!\t操作错误!\n");return head;}p1=head->next;p2=p1;while(p1!=NULL){if(strcmp(p1->name,stu_name)==0){printf("\n\n你所删除的学生姓名为: %s\t学号为:%s\n",p1->name,p1->num);printf("\n\n确定为:y,取消为n\t:");i=getchar();while(!((i=='y')||(i=='Y')||(i=='n')||(i=='N'))){printf("\n\n输入错误!\t请重新输入:");i=getchar();}if((i=='y')||(i=='Y')){if(j==0){head->next=p1->next;/*删除头部接点*/}else{p2->next=p1->next;}printf("\n\n\t\t\t\t成功删除用户信息!\n\n\t\t\t按回车键继续...\n");free(p1);return head;}else{return head;}}j++;p2=p1;p1=p1->next;}printf("\n\n\t\t没有此用户记录信息!\n按回车键继续\n");getchar();system("cls");display(head);getchar();return head;}/*====================================================================删除学生信息(以学号为对象)====================================================================*/stu* delnum(stu *head,char *stu_num)/*根据学生学号删除用户信息*/{stu *p1,*p2;char i,j=0;system("cls");if(head->next==NULL){printf("\n\n\t\t没有存储学生信息!\n\n\t\t操作错误!\n");return head;}p1=head->next;p2=p1;while(p1->next!=NULL){if(strcmp(p1->num,stu_num)==0){printf("\n\n你所删除的学生姓名为: %s\t学号为:%s\n",p1->name,p1->num);printf("\n\n确定为:y,取消为n\t:");i=getchar();while(!((i=='y')||(i=='Y')||(i=='n')||(i=='N'))){printf("\n\n输入错误!\t请重新输入:");i=getchar();}if((i=='y')||(i=='Y')){if(j==0){head->next=p1->next;}else{p2->next=p1->next;}printf("\n\n\t\t\t\t成功删除用户信息!\n\n\t\t\t按回车键继续...\n");free(p1);return head;}elsereturn head;}p2=p1;p1=p1->next;j++;}printf("\n\n没有此用户信息!\n按回车键继续...\n");getchar();system("cls");display(head);getchar();return head;}/*====================================================================输出指定学生信息(以学生姓名为对象)====================================================================*/stu* checkname(stu *head,char *stu_name)/*输出指定学生的信息*/{stu *p1;system("cls");if(head==NULL){printf("\n\n\t\t没有存储学生信息!\t操作错误!\n");getchar();return head;}p1=head;while(p1->next!=NULL){if(strcmp(p1->name,stu_name)==0){printf("\n\n你所查找的学生信息如下\n");printf(" \n\n%s\t学号为:%s\n",p1->name,p1->num);printf("姓名\t学号\t\t %s\t %s\t %s\t%s\t平均分\n",\sc_name[0],sc_name[1],sc_name[2],sc_name[3]);printf("%s\t%s\t\t %d\t %d\t%d\t%d\t%d\n",\p1->name,p1->num,p1->score[0],p1->score[1],p1->score[2],p1->score[3],p1->average);getchar();return p1;}p1=p1->next;}printf("\n\n\t\t找不到相关用户信息!\n按回车键继续...\n");getchar();system("cls");display(head);getchar();return (stu*)NULL;}/*====================================================================输出指定学生信息(以学生学号为对象)====================================================================*/stu* checknum(stu *head,char *stu_num)/*输出指定学生学号的学生信息*/{stu *p1,*p2;p2=(stu*)malloc(sizeof(stu));system("cls");if(head==NULL){printf("\n\n\t\t没有存储学生信息!\t操作错误!\n");return head;}p1=head;while(p1->next!=NULL){if(strcmp(p1->num,stu_num)==0){printf("\n\n你所查找的学生信息如下\n");printf(" %s\t学号为:%s\n",p1->name,p1->num);printf("姓名\t学号\t\t %s\t %s\t %s\t%s\t平均分\n",\sc_name[0],sc_name[1],sc_name[2],sc_name[3]);printf("%s\t%s\t\t %d\t %d\t%d\t%d\t%d\n",\p1->name,p1->num,p1->score[0],p1->score[1],p1->score[2],p1->score[3],p1->average);getchar();return p1;}p1=p1->next;}printf("\n\n\t\t找不到相关用户信息!\n按回车键继续...\n");getchar();return (stu*)NULL;}/*====================================================================修改指定学生信息(以学生姓名为对象)====================================================================*/void changsc_name(stu *head,char *name)/*修改用户成绩*/{stu *p;char j=0;system("cls");p=checkname(head,name);if(p!=NULL){p->average=0;printf("\n\n请输入学生新的学号: ");scanf("%s",p->num);while(!cheknum(p->num)){printf("\n\n输入格式错误!请重新输入学号:\n ");scanf("%s",p->num);}do{printf("\n\n请输入学生成绩%s :",sc_name[j]);scanf("%d",&p->score[j]);while((100<p->score[j])||(p->score[j]<0)){printf("\n\n成绩格式出错!\n ");getchar();printf("\n\n请重新输入学生成绩: ");scanf("%d",&p->score[j]);}p->average+=p->score[j];j++;}while(j<sc_num);p->average=p->average/4;printf("\n\n\t\t用户数据更新完毕!\n请按回车键退出...\n");getchar();system("cls");display(head);getchar();}}/*==================================================================== 修改指定学生信息(以学生学号为对象)==================================================================== */void changsc_num(stu *head,char *num)/*修改用户成绩*/{stu *p2;char j=0;system("cls");p2=checknum(head,num);if(p2!=NULL){p2->average=0;printf("\n\n请输入学生姓名: ");scanf("%s",p2->name);while(!chekname(p2->name)){printf("\n\n输入格式错误!请重新输入学号: ");scanf("%s",p2->name);}do{printf("\n\n请输入学生成绩%s :",sc_name[j]);scanf("%d",&p2->score[j]);while((100<p2->score[j])||(p2->score[j]<0)){printf("\n\n成绩格式出错!\n ");getchar();printf("\n\n请重新输入学生成绩: ");scanf("%d",&p2->score[j]);}p2->average+=p2->score[j];j++;}while(j<sc_num);p2->average=p2->average/4;printf("\n\n\t\t用户数据更新完毕!请按回车键退出...\n");getchar();}}/*==================================================================== ==================================================================== ============================存储操作类函数========================== ==================================================================== ==================================================================== *//*==================================================================== 加载学生信息==================================================================== */stu* load(void)/*加载用户数据*/{FILE *fp;stu *p,*head,*p1;char i=0,j=0;fp=fopen(stu_msg,"r");rewind(fp);head=(stu*)malloc(sizeof(stu));p1=p=(stu *)malloc(sizeof(stu));while(fread(p,sizeof(stu),1,fp)==1){if(i==0){head->next=p;p1=p;}else{p1->next=p;p1=p;p1->next=NULL;}i++;p=(stu*)malloc(sizeof(stu));j++;}if(j==0){printf("\n\n\t\t\t没有数据信息可载入!\n");head=NULL;free(p);getchar();}fclose(fp);return head;}/*====================================================================显示学生信息====================================================================*/char disload()/*显示用户信息*/{FILE *fp;stu *p1;char i=0;p1=(stu*)malloc(sizeof(stu));if((fp=fopen(stu_msg,"r+"))==NULL)fp=fopen(stu_msg,"w+");rewind(fp);while(fread(p1,sizeof(stu),1,fp)==1){printf("%s\t%s\t %d\t %d\t%d\t%d\t%d\n",\p1->name,p1->num,p1->score[0],p1->score[1],p1->score[2],p1->score[3],p1->average);i++;//fread(p1,sizeof(stu),1,fp);}fclose(fp);if(i==0){printf("\n\t\t\t文件中不含学生信息!\n\t\t\t按回车键继续...\n");getchar();}else{printf("\n\t\t\t一共记录了%d名学生信息!\n\t\t\t按回车键继续...\n",i);getchar();}}/*==================================================================== 保存学生信息==================================================================== */char save(stu *head)/*保存用户数据*/{stu *p;FILE *fp;stu stt;char i=0;p=head->next;system("cls");clrtxt(stu_msg);fp=fopen(stu_msg,"w");rewind(fp);//if(head->next!=NULL){while(p!=NULL){fwrite(p,sizeof(stu),1,fp);p=p->next;i++;}if(i==0){printf("没有保存数据!\n");getchar();fclose(fp);return 0;}else{fclose(fp);return 1;}}else{fclose(fp);return 0;}fclose(fp);return 0;}/*==================================================================== 创建文本信息==================================================================== */char* creat_txt(char *username)/*根据用户名,创建一个用户文件*/{char name[20];FILE *fp;strcpy(name,"d:\\");strcat(name,username);strcat(name,".txt");fp=fopen(name,"w+");system("cls");if(fp!=NULL){//printf("\n\n文件路径为:%s\n\n",name);//printf("\n\n\t\t用户文件创建成功!\n\n\t\t请按回车键继续...\n");//getchar();fclose(fp);return name;}else{printf("\n\n\t\t无法创建用户文件!\n\n\t\t请按回车键继续...\n");getchar();fclose(fp);return name;}}/*====================================================================清除文本信息====================================================================*/FILE* chekuser(char *username)/*根据用户名,查找是否有此用户信息,若无,返回NULL*/ {}/*====================================================================清除文本信息====================================================================*/void clrtxt(char *str)/*清除文本信息*/{char clrmem[10];char semem[40];FILE *fp;int i=0,j=0;if((fp=fopen(str,"r"))==NULL){printf("\n\t无此文件!");getchar();}else{fclose(fp);fp=fopen(str,"w");memset(clrmem,'\0',sizeof(clrmem));rewind(fp);for(i=0;i<40;i++){if(fwrite(clrmem,sizeof(clrmem),1,fp)!=1){if(j==0){printf("\n\n\t\t文件清除失败!\n\n\t\t请按回车键继续...\n");getchar();break;}else{//printf("\n\n\t\t文件清除成功!\n\n\t\t请按回车键继续...\n");//getchar();break;}}elsej++;}fclose(fp);}}/*====================================================================用户登录信息====================================================================*/void setlogintime(void)/*记录用户登录时间*/{FILE *fp;int y,m,d,hour,min,sec;time_t T; // 一个可以包含时间信息的长整型struct tm *timeinfo;time( &T ); // 得到机器的日历时间if((fp=fopen(logtimemsg,"a+"))==NULL){fp=fopen(logtimemsg,"w");}time( &T ); // 得到机器的日历时间timeinfo = localtime( &T ); // 将日历时间转换为当地时间,timeinfo 是一个时间格式的指针y=timeinfo->tm_year + 1900; // 年份m=timeinfo->tm_mon + 1; // 月份d=timeinfo->tm_mday; // 日期hour=timeinfo->tm_hour;min=timeinfo->tm_min;sec=timeinfo->tm_sec;fwrite(userlogin,sizeof(userlogin),1,fp);fwrite(timeinfo,sizeof(struct tm),1,fp);//写入用户登陆信息printf("\n\n\n\t\t登陆时间为:\n\t\t%d年%d月%d日%d时%d分%d秒\n\n\n", y, m, d,hour,min,sec);fclose(fp);}/*====================================================================用户登录信息====================================================================*/void dislogintime(void)/*显示用户登录信息*/{FILE *fp;int y,m,d,hour,min,sec;struct tm *timeinfo;char name[10];int i=0;timeinfo=(struct tm*)malloc(sizeof(struct tm));fp=fopen(logtimemsg,"r+");if(fp==NULL){printf("\n\n\t\t找不到文件信息!\n\n\t\t按回车键继续...\n");getchar();}else{memset(name,'\0',sizeof(name));while(fread(name,sizeof(name),1,fp)==1){fread(timeinfo,sizeof(struct tm),1,fp);y=timeinfo->tm_year + 1900; // 年份insm=timeinfo->tm_mon + 1; // 月份d=timeinfo->tm_mday; // 日期hour=timeinfo->tm_hour;min=timeinfo->tm_min;sec=timeinfo->tm_sec;i++;printf("\n\t第%d次登陆时间为:%d年%d月%d日%d时%d分%d秒\t%s用户登录",i,y, m, d,hour,min,sec,name);memset(name,'\0',sizeof(name));}if(i==0)printf("\n没有记录用户登录时间!\n");getchar();free(timeinfo);fclose(fp);}}/*====================================================================用户登录信息====================================================================*/。
.教育资料word.功能说明:实现两种权限的身份登陆的教务管理系统*/#include stdio.h#include stdlib.h#include string.h#include ime.h#include memory.h// 定义邮件地址 #define share d:\\share.dat//d:\\manager.dat 定义管理员邮件地址 #define manager//#define outmsg d:\\outmsg.dat 定义公告邮件地址//#define logtimemsg d:\%used login time.dat 定义用户登录时间信息//定义学生起始文件信息#define star_stu d:\\stu_scname.dat // 定义学生成绩信息地址 d:\\stu.dat #define stu_msg//定义文件头部密码 #define mass_key é0008758typedef struct student stu;不允许改动,门科目4 #define sc_num 4 只设定//#define uint unsigned int*/ /*学生成绩管理系统结构struct student{教育资料word.char num[10]; /*学生学号*/char name[10]; /*学生姓名*/uint score[sc_num]; /*科目分数*/uint average; /*科目平均分*/stu *next;}st;char gettemp=0;/*管理员身份识别结构*/typedef struct username user;struct username{char username[20];//char password[20];}use;/*时间登录信息*/struct Logtime{char userlogin[20];struct tm;};char logc;//登录次数typedef struct Logtime logtime;//========================================================== //定义通讯协议//==========================================================#define mass_max 200 //定义信息量struct Massage{int cont; //文件数量char username[15]; //发送人char mass[mass_max];//信息}mas;typedef struct Massage massage;//========================================================== //========================================================== char userlogin[10];char sc_name[sc_num][10];/*以上是学生信息*/char welcome(void);/*用户界面,返回0,则表示退出系统*//*教育资料word.==================================================================== 学生信息操作==================================================================== */stu*creat();/*建立链表*/void display(stu *head);/*显示用户信息*/void insert(stu *head);/*增加学生信息*/stu* delname(stu*head,char *stu_name);/*根据学生姓名删除用户信息*/ stu* delnum(stu *head,char *stu_num);/*根据学生学号删除用户信息*/stu* checkname(stu *head,char *stu_name);/*输出指定学生的信息*/stu* checknum(stu *head,char *stu_num);/*输出指定学生学号的学生信息*/ void changsc_name(stu *head,char *name);/*修改用户成绩*/void changsc_num(stu *head,char *num);/*修改用户成绩*/void waring(void);/*产生警告信息*/char cheknum(char *num);/*检查学生学号是否符合格式*/char chekname(char *name);/*检查学生姓名是否符合格式*/char chekscore(char score);/*检查学生分数是否符合格式*/stu* sortscore(stu *head);/*学生按平均成绩排序*/stu* sortnum(stu *head);/*学生信息按学号排序*//*==================================================================== 学生用户登录==================================================================== */char stulogin(void);/*进入普通用户登录界面*/char stucheck(char *nam,char *stnum);/*查找是否存在该学生信息*/char newlogin(char *nam,char *stnum);/*注册学生信息*/void disnewst(void);/*获得学生信息*//*==================================================================== 系统管理选择,管理员权限==================================================================== */void stu_system(void);/*对各种操作集中管理*/void sentmsg(void);/*发送公告*/char readmsg(void);/*浏览信息*/char delemsg(void);//删除信息void chagesbject(void);/*修改课程信息*//*==================================================================== 用户登录信息==================================================================== */void setlogintime(void);/*记录用户登录时间*/教育资料word.void dislogintime(void);/*显示用户登录信息*/void setused(void);/*注册新用户资料*/char usedcheckname(char *name);/*用户信息检查,若存在用户,则返回1,否则返回0*/ char usedcheckpass(char *name,char *password);/*查看用户名密码是否符合*//*====================================================================存储操作====================================================================*/char save(stu *head);/*保存用户数据*/char disload();/*显示用户信息*/stu* load(void);/*加载用户数据*/void clrtxt(char *str);/*清除文本信息*/char* creat_txt(char *username);/*根据用户名,创建一个用户文件*/FILE* chekuser(char *username);/*根据用户名,查找是否有此用户信息,若无,返回NULL*/ /*====================================================================---------------main函数----------====================================================================*/void main(){FILE *fp;char i,j;char name[15];system(color b5);memset(name,'\0',sizeof(name));if((fp=fopen(star_stu ,+))==NULL){牰湩晴尨将新建文件!\n);fp=fopen(star_stu ,w+);}fread(name,sizeof(name),1,fp);if(strcmp(name,mass_key)!=0){牰湩晴尨文件载入出错!\t N为退出回车键继续...:);i=getchar();if((i=='n')||(i=='N')){fclose(fp);exit(1);}else教育资料word.{printf(\\n数据将重新初始化 !\n);printf(\\n请输入 4门科目名称\n);memset(name,'\0',sizeof(name));fwrite(name,sizeof(name),5,fp);strcpy(name,mass_key);rewind(fp);fwrite(name,sizeof(name),1,fp);for(i=0;i<sc_num;i++){printf(\\n第%d 门科目名称 : ,i+1);scanf(%s,sc_name[i]);if(fwrite(sc_name[i],sizeof(sc_name[i]),1,fp)!=1){printf(\\n\t\t\t\t保存出错!\n);getchar();exit(1);}}}}else{if(fp==NULL)printf(\文件错误!);fscanf(fp,%s%s%s%s,sc_name[0],sc_name[1],sc_name[2],sc_name[3]); }fp=fopen(share,w); //为防止文件在后面打开错误fclose(fp);fp=fopen(manager,w);fclose(fp);fp=fopen(outmsg,w);fclose(fp);do{j=welcome();if(j==1){system(cls);printf(\ \t 欢迎进入学生用户中心系统!);setlogintime();j=stulogin();}教育资料word.else if(j==2){setlogintime();stu_system();}}while(j!=0);fp=fopen(share,w); //为防止文件未关闭,倒置文件内容丢失 fclose(fp);fp=fopen(manager,w);fclose(fp);fp=fopen(outmsg,w);fclose(fp);fp=fopen(logtimemsg,w);fclose(fp);fp=fopen(star_stu,w);fclose(fp);fp=fopen(stu_msg,w);}/*====================================================================---------------------------初始化用户界面---------------------------====================================================================*///返回1,则进入stu用户界面//返回0,则表示退出//返回2,则表示进入管理员界面char welcome(void){char username[20];char userpass[20];char i,wrong_cont=0,key=0,weling=1,back=0;char temp;system(color b5);while(weling){do{system(cls);printf(\ *********************欢迎进入教务管理系统********************\n); printf(\ **\n);printf(\ * 1.用户登录教育资料word.*\n);printf(\ **\n);printf(\ * 2.用户注册*\n);printf(\ * *\n);printf(\ * 3.管理员登陆*\n);printf(\ **\n);printf(\ * 4.管理员注册*\n);printf(\ **\n);printf(\ * 5.退出系统printf(\ **\n);printf(\ =============================================================\n); printf(\ 请按命令提示操作\n); printf(\\n\n);printf(\\n\n);牰湩晴尨您输入的命令为:\t);i=getchar();if((i!='1')&&(i!='2')&&(i!='3')&&(i!='4')&&(i!='5')){printf(\输入错误的指令!请按命令提示操作 1-3\n);getchar();}}while((i!='1')&&(i!='2')&&(i!='3')&&(i!='4')&&(i!='5'));switch(i){case '1':{system(cls);memset(username,'\0',sizeof(username));memset(userpass,'\0',sizeof(userpass));printf(\\t请输入用户名 :\t);scanf(%s,username);printf(\\t请输入学号 :\t);scanf(%s,userpass);temp=stucheck(username,userpass);教育资料word.if(temp==0){牰湩晴尨没有学生档案信息! 请注册...\n);getchar();break;}else if(temp==1)memset(userlogin,'\0',sizeof(userlogin));strcpy(userlogin,username);printf(\\t 学生成绩登录有效!);getchar();return 1;}getchar();//=======================break;}case '2':{system(cls);memset(username,'\0',sizeof(username));memset(userpass,'\0',sizeof(userpass));printf(\\t 请输入用户名 :\t);scanf(%s,username);printf(\\t 请输入学号 :\t);scanf(%s,userpass);while(cheknum(userpass)!=1){牰湩晴尨您的输入格式有误,请重新输入 !\n);牰湩晴尨按回车键继续 ...\n);getchar();memset(userpass,'\0',sizeof(userpass));printf(\\t请输入学号 :\t);scanf(%s,userpass);}if(newlogin(username,userpass))printf(\\t注册成功! 用户名:%s\t学号:%s,username,userpass); getchar();break;}case '3':{do教育资料word.{system(cls);memset(username,'\0',sizeof(username));memset(userpass,'\0',sizeof(userpass));printf(\\t请输入用户名 :\t);scanf(%s,username);printf(\\t请输入密码 :\t);scanf(%s,userpass);if(usedcheckpass(username,userpass)==0){wrong_cont++;if(wrong_cont==3){printf(\\t输入次数大于 3次!请按回车键退出系统!\n);getchar();weling=0;return 0;}key=1;printf(\\t按1选择返回主菜单 \n\t按0继续输入用户验证码\n); do{back=getchar();if((back!='1')&&(back!='0')){printf(\\t输入错误! 按回车键继续...);getchar();}}while((back!='1')&&(back!='0'));if(back=='1')key=0;}else{key=0;weling =0;system(cls);printf(\\n\t\t欢迎 %s进入学生管理系统\n,username); memset(userlogin,'\0',sizeof(userlogin)); strcpy(userlogin,username); //记录用户登录信息 return 2;}教育资料word.}while(key);back=0;weling=1;break;return 2;}case '4':{setused();/*注册新管理员资料*/weling=1;break;}case '5':{weling=0;return 0;}}}return 1;}/*==================================================================== ---------------建立链表----------==================================================================== */stu*creat()/*建立链表*/{char i,j;char stu_num;stu *p1, *p2;stu *head;FILE *fp;fp=fopen(stu_msg,w+);head=(stu*)malloc(sizeof(stu));head->next=NULL;p1=p2=(stu*)malloc(sizeof(stu));i=0,j=0;system(cls);printf(\\n请输入要录入的学生人数: );scanf(%d,&stu_num);for(i=0;i<stu_num;i++)教育资料word.{system(cls);p1->average=0;printf(\\n请输入学生学号: );scanf(%s,p1->num);while(!cheknum(p1->num)){printf(\\n输入格式错误!请重新输入学号 : );scanf(%s,p1->num);}printf(\\n请输入学生姓名 : );scanf(%s,p1->name);while(!chekname(p1->name)){printf(\\n输入格式出错!不能带数字或下划线!\n);printf(\\n请重新输入学生姓名: );scanf(%s,p1->name);}do{printf(\\n请输入学生%s成绩 :,sc_name[j]);scanf(%d,&p1->score[j]);while((100<p1->score[j])||(p1->score[j]<0)){printf(\\n成绩格式出错!\n );getchar();printf(\\n请重新输入学生成绩 : );scanf(%d,&p1->score[j]);}p1->average+=p1->score[j];j++;}while(j<sc_num);j=0;p1->average=p1->average/4;if(i==0){head->next=p1; /*分清楚是head->next=p还是head=p*/ p2=p1;p1->next=NULL;}else{教育资料word.p2->next=p1;p2=p1;p2->next=NULL; /*产生新的节点*/}fwrite(p1,sizeof(stu),1,fp);p1=(stu*)malloc(sizeof(stu));}display(head);getchar();fclose(fp);return head;}/*==================================================================== 检查学生学号是否符合格式,若正确,则返回1,否则返回0==================================================================== */char cheknum(char *num)/*检查学生学号是否符合格式*/{char i; /*获取字符串长度*/char j=strlen(num);for(i=0;i<j;i++){if(('0'>num[i])||('9'<num[i])){return 0;exit(1);}}return 1;}/*==================================================================== 检查学生姓名是否符合格式,若正确,则返回1,否则返回0==================================================================== */char chekname(char *name)/*检查学生姓名是否符合格式*/{char i;for(i=0;i<strlen(name);i++){/*if(('A'>name[i])||(('Z'<name[i])&&('a'>name[i]))||('z'<name[i]))/if(name[i]<18)教育资料word.{return 0;exit(1);}*/}return 1;}/*====================================================================显示学生成绩情况====================================================================*/void display(stu *head)/*显示用户信息*/{stu *p1;char i=0;p1=head->next;system(cls);if(p1!=NULL){while(p1!=NULL){if(i==0){牰湩晴尨姓名\t学号\t %s\t %s\t %s\t%s\t平均分\n,sc_name[0],sc_name[1],sc_name[2],sc_name[3]);i++;}printf(%s\t%s\t %d\t %d\t%d\t%d\t%d\n,\p1->name,p1->num,p1->score[0],p1->score[1],p1->score[2],p1->score[3],p1->average); p1=p1->next;}getchar();}else{printf(\ \t\t链表为空!\n\n\n请按回车键继续...\n);getchar();}}/*教育资料word.==================================================================== 插入学生信息==================================================================== */void insert(stu *head)/*增加学生信息*/{stu *p1,*p2;char j=0;p1=head->next;p2=(stu*)malloc(sizeof(stu)); /*创建新的学生信息*/p2->average=0;system(cls);printf(\\n请输入要增加的学生学号: );scanf(%s,p2->num);while(!cheknum(p2->num)){printf(\\n输入格式错误!请重新输入学号 : );scanf(%s,p2->num);}printf(\\n请输入学生的姓名 : );scanf(%s,p2->name);while(!chekname(p2->name)){printf(\\n输入格式出错!不能带数字或下划线!\n);printf(\\n请重新输入学生姓名: );scanf(%s,p2->name);}do{printf(\\n请输入学生%s成绩 :,sc_name[j]);scanf(%d,&p2->score[j]);while((100<p2->score[j])||(p2->score[j]<0)){printf(\\n成绩格式出错!\n );getchar();printf(\\n请重新输入学生成绩 : );scanf(%d,&p2->score[j]);}p2->average+=p2->score[j];j++;}while(j<sc_num);p2->average=p2->average/4;if(head->next==NULL){教育资料word.printf(\原链表为空!);getchar();head->next=p2;}else{while(p1->next!=NULL)p1=p1->next;p1->next=p2;p2->next=NULL;}display(head);getchar();}/*==================================================================== 删除学生信息==================================================================== */stu* delname(stu*head,char *stu_name)/*根据学生姓名删除用户信息*/ {stu *p1,*p2;char i,j=0;system(cls);if(head->next==NULL){printf(\\n没有学生信息!\t操作错误!\n);return head;}p1=head->next;p2=p1;while(p1!=NULL){if(strcmp(p1->name,stu_name)==0){printf(\\n你所删除的学生姓名为: %s\t号学:%s\n,p1->name,p1->num); 为n\t:); 确定为:y,取消为 printf(\\ni=getchar();while(!((i=='y')||(i=='Y')||(i=='n')||(i=='N'))){:); !\t请重新输入printf(\\n 输入错误i=getchar();}教育资料word.if((i=='y')||(i=='Y')){if(j==0){head->next=p1->next;/*删除头部接点*/}else{p2->next=p1->next;}printf(\\n\t\t\t\t成功删除用户信息!\n\n\t\t\t按回车键继续...\n); free(p1);return head;}else{return head;}}j++;p2=p1;p1=p1->next;}printf(\\n\t\t没有此用户记录信息!\n按回车键继续\n);getchar();system(cls);display(head);getchar();return head;}/*==================================================================== 删除学生信息(以学号为对象)==================================================================== */stu* delnum(stu *head,char *stu_num)/*根据学生学号删除用户信息*/ {stu *p1,*p2;char i,j=0;system(cls);if(head->next==NULL){教育资料word.printf(\\n\t\t没有存储学生信息!\n\n\t\t操作错误!\n);return head;}p1=head->next;p2=p1;while(p1->next!=NULL){if(strcmp(p1->num,stu_num)==0){printf(\\n你所删除的学生姓名为: %s\t学号为:%s\n,p1->name,p1->num); printf(\\n确定为:y,取消为n\t:);i=getchar();while(!((i=='y')||(i=='Y')||(i=='n')||(i=='N'))){printf(\\n输入错误!\t请重新输入 :);i=getchar();}if((i=='y')||(i=='Y')){if(j==0){head->next=p1->next;}else{p2->next=p1->next;}printf(\\n\t\t\t\t成功删除用户信息!\n\n\t\t\t按回车键继续...\n); free(p1);return head;}elsereturn head;}p2=p1;p1=p1->next;j++;}printf(\\n没有此用户信息!\n按回车键继续...\n);getchar();system(cls);教育资料word.display(head);getchar();return head;}/*====================================================================输出指定学生信息(以学生姓名为对象)====================================================================*/stu* checkname(stu *head,char *stu_name)/*输出指定学生的信息*/{stu *p1;system(cls);if(head==NULL){printf(\\n\t\t没有存储学生信息!\t操作错误!\n);getchar();return head;}p1=head;while(p1->next!=NULL){if(strcmp(p1->name,stu_name)==0){printf(\\n你所查找的学生信息如下\n);printf( \n\n%s\t学号为:%s\n,p1->name,p1->num);牰湩晴尨姓名\t学号\t\t %s\t %s\t %s\t%s\t平均分 \n,\sc_name[0],sc_name[1],sc_name[2],sc_name[3]);printf(%s\t%s\t\t %d\t %d\t%d\t%d\t%d\n,\p1->name,p1->num,p1->score[0],p1->score[1],p1->score[2],p1->score[3],p1->average); getchar();return p1;}p1=p1->next;}printf(\\n\t\t找不到相关用户信息!\n按回车键继续...\n);getchar();system(cls);display(head);.getchar();return (stu*)NULL;}/*====================================================================输出指定学生信息(以学生学号为对象)====================================================================*/stu* checknum(stu *head,char *stu_num)/*输出指定学生学号的学生信息*/{stu *p1,*p2;p2=(stu*)malloc(sizeof(stu));system(cls);if(head==NULL){printf(\\n\t\t没有存储学生信息!\t操作错误!\n);return head;}p1=head;while(p1->next!=NULL){if(strcmp(p1->num,stu_num)==0){printf(\\n你所查找的学生信息如下\n);printf( %s\t学号为:%s\n,p1->name,p1->num);牰湩晴尨姓名\t学号\t\t %s\t %s\t %s\t%s\t平均分 \n,\sc_name[0],sc_name[1],sc_name[2],sc_name[3]);printf(%s\t%s\t\t %d\t %d\t%d\t%d\t%d\n,\p1->name,p1->num,p1->score[0],p1->score[1],p1->score[2],p1->score[3],p1->average); getchar();return p1;}p1=p1->next;}\n\t\t找不到相关用户信息!\n按回车键继续...\n);getchar();return (stu*)NULL;}教育资料word./*==================================================================== 修改指定学生信息(以学生姓名为对象)==================================================================== */void changsc_name(stu *head,char *name)/*修改用户成绩*/{stu *p;char j=0;system(cls);p=checkname(head,name);if(p!=NULL){p->average=0;printf(\\n请输入学生新的学号: );scanf(%s,p->num);while(!cheknum(p->num)){printf(\\n输入格式错误!请重新输入学号 :\n );scanf(%s,p->num);}do{printf(\\n请输入学生成绩%s :,sc_name[j]);scanf(%d,&p->score[j]);while((100<p->score[j])||(p->score[j]<0)){printf(\\n成绩格式出错!\n );getchar();printf(\\n请重新输入学生成绩 : );scanf(%d,&p->score[j]);}p->average+=p->score[j];j++;}while(j<sc_num);p->average=p->average/4;printf(\\n\t\t用户数据更新完毕!\n请按回车键退出...\n);getchar();system(cls);display(head);getchar();}}/*教育资料word.==================================================================== 修改指定学生信息(以学生学号为对象)==================================================================== */void changsc_num(stu *head,char *num)/*修改用户成绩*/{stu *p2;char j=0;system(cls);p2=checknum(head,num);if(p2!=NULL){p2->average=0;printf(\\n请输入学生姓名: );scanf(%s,p2->name);while(!chekname(p2->name)){printf(\\n输入格式错误!请重新输入学号 : );scanf(%s,p2->name);}do{printf(\\n请输入学生成绩%s :,sc_name[j]);scanf(%d,&p2->score[j]);while((100<p2->score[j])||(p2->score[j]<0)){printf(\\n成绩格式出错!\n );getchar();printf(\\n请重新输入学生成绩 : );scanf(%d,&p2->score[j]);}p2->average+=p2->score[j];j++;}while(j<sc_num);p2->average=p2->average/4;printf(\\n\t\t用户数据更新完毕!请按回车键退出...\n);getchar();}}/*==================================================================== ==================================================================== ============================存储操作类函数========================== ==================================================================== 教育资料word.==================================================================== *//*==================================================================== 加载学生信息==================================================================== */stu* load(void)/*加载用户数据*/{FILE *fp;stu *p,*head,*p1;char i=0,j=0;fp=fopen(stu_msg,);rewind(fp);head=(stu*)malloc(sizeof(stu));p1=p=(stu *)malloc(sizeof(stu));while(fread(p,sizeof(stu),1,fp)==1){if(i==0){head->next=p;p1=p;}else{p1->next=p;p1=p;p1->next=NULL;}i++;p=(stu*)malloc(sizeof(stu));j++;}if(j==0){printf(\\n\t\t\t没有数据信息可载入!\n);head=NULL;free(p);getchar();}fclose(fp);return head;}/*教育资料word.==================================================================== 显示学生信息==================================================================== */char disload()/*显示用户信息*/{FILE *fp;stu *p1;char i=0;p1=(stu*)malloc(sizeof(stu));if((fp=fopen(stu_msg,+))==NULL)fp=fopen(stu_msg,w+);rewind(fp);while(fread(p1,sizeof(stu),1,fp)==1){printf(%s\t%s\t %d\t %d\t%d\t%d\t%d\n,\p1->name,p1->num,p1->score[0],p1->score[1],p1->score[2],p1->score[3],p1->average); i++;//fread(p1,sizeof(stu),1,fp);}fclose(fp);if(i==0){printf(\\t\t\t文件中不含学生信息!\n\t\t\t按回车键继续...\n);getchar();}else{printf(\\t\t\t一共记录了%d名学生信息!\n\t\t\t按回车键继续...\n,i);getchar();}}/*====================================================================保存学生信息====================================================================*/char save(stu *head)/*保存用户数据*/{stu *p;FILE *fp;stu stt;char i=0;教育资料word.p=head->next;system(cls);clrtxt(stu_msg);fp=fopen(stu_msg,w);rewind(fp);//if(head->next!=NULL){while(p!=NULL){fwrite(p,sizeof(stu),1,fp);p=p->next;i++;}if(i==0){牰湩晴尨没有保存数据!\n);getchar();fclose(fp);return 0;}else{fclose(fp);return 1;}}else{fclose(fp);return 0;}fclose(fp);return 0;}/*==================================================================== 创建文本信息==================================================================== */char* creat_txt(char *username)/*根据用户名,创建一个用户文件*/{char name[20];FILE *fp;教育资料word.strcpy(name,d:\\);strcat(name,username);strcat(name,.txt);fp=fopen(name,w+);system(cls);if(fp!=NULL){//printf(\\n文件路径为:%s\n\n,name);//printf(\\n\t\t用户文件创建成功!\n\n\t\t请按回车键继续...\n);//getchar();fclose(fp);return name;}else{printf(\\n\t\t无法创建用户文件!\n\n\t\t请按回车键继续...\n);getchar();fclose(fp);return name;}}/*====================================================================清除文本信息====================================================================*/FILE* chekuser(char *username)/*根据用户名,查找是否有此用户信息,若无,返回NULL*/ {}/*====================================================================清除文本信息====================================================================*/void clrtxt(char *str)/*清除文本信息*/{char clrmem[10];char semem[40];FILE *fp;int i=0,j=0;if((fp=fopen(str,))==NULL){printf(\\t无此文件!);教育资料word.getchar();}else{fclose(fp);fp=fopen(str,w);memset(clrmem,'\0',sizeof(clrmem));rewind(fp);for(i=0;i<40;i++){if(fwrite(clrmem,sizeof(clrmem),1,fp)!=1){if(j==0){printf(\\n\t\t文件清除失败!\n\n\t\t请按回车键继续...\n); getchar();break;}else{//printf(\\n\t\t文件清除成功!\n\n\t\t请按回车键继续...\n); //getchar();break;}}elsej++;}fclose(fp);}}/*====================================================================用户登录信息====================================================================*/void setlogintime(void)/*记录用户登录时间*/{FILE *fp;int y,m,d,hour,min,sec;time_t T; // 一个可以包含时间信息的长整型struct tm *timeinfo;time( &T ); // 得到机器的日历时间if((fp=fopen(logtimemsg,a+))==NULL)教育资料word.{fp=fopen(logtimemsg,w);}time( &T ); // 得到机器的日历时间timeinfo = localtime( &T ); // 将日历时间转换为当地时间,timeinfo 是一个时间格式的指针y=timeinfo->tm_year + 1900; // 年份m=timeinfo->tm_mon + 1; // 月份d=timeinfo->tm_mday; // 日期hour=timeinfo->tm_hour;min=timeinfo->tm_min;sec=timeinfo->tm_sec;fwrite(userlogin,sizeof(userlogin),1,fp);fwrite(timeinfo,sizeof(struct tm),1,fp);//写入用户登陆信息printf(\\n\n\t\t登陆时间为:\n\t\t%d年 %d月 %d日 %d时 %d分 %d秒\n\n\n,y, m, d,hour,min,sec);fclose(fp);}/*====================================================================用户登录信息====================================================================*/void dislogintime(void)/*显示用户登录信息*/{FILE *fp;int y,m,d,hour,min,sec;struct tm *timeinfo;char name[10];int i=0;timeinfo=(struct tm*)malloc(sizeof(struct tm));fp=fopen(logtimemsg,+);if(fp==NULL){printf(\\n\t\t找不到文件信息!\n\n\t\t按回车键继续...\n);getchar();}else{memset(name,'\0',sizeof(name));while(fread(name,sizeof(name),1,fp)==1){fread(timeinfo,sizeof(struct tm),1,fp);教育资料word.y=timeinfo->tm_year + 1900; // 年份insm=timeinfo->tm_mon + 1; // 月份d=timeinfo->tm_mday; // 日期hour=timeinfo->tm_hour;min=timeinfo->tm_min;sec=timeinfo->tm_sec;i++;printf(\\t第%d次登陆时间为:%d年 %d月 %d日 %d时 %d分 %d秒\t%s用户登录,i,y, m, d,hour,min,sec,name);memset(name,'\0',sizeof(name));}if(i==0)printf(\没有记录用户登录时间!\n);getchar();free(timeinfo);fclose(fp);}}/*==================================================================== 用户登录信息==================================================================== */void setused(void)/*注册新用户资料*/{FILE *fp;char chekpassword[20]; //10检查用户密码输入char lgway[20];char i=0;system(cls);memset(use.password,'\0',sizeof(use.password));memset(chekpassword,'\0',sizeof(chekpassword));memset(ername,'\0',sizeof(ername));do{printf(\\n请输入用户名:\t);scanf(%s,ername);printf(\\n请输入用户密码:\t);scanf(%s,use.password);printf(\\n请再次输入密码:\t);scanf(%s,chekpassword);if(strcmp(use.password,chekpassword)!=0){printf(\\n\t\t密码不匹配!\n按回车键继续\n);getchar();教育资料word.i=1;memset(use.password,'\0',sizeof(use.password));memset(chekpassword,'\0',sizeof(chekpassword));memset(ername,'\0',sizeof(ername));}else i=0;}while(i);strcpy(lgway,creat_txt(ername));clrtxt(lgway);fp=fopen(lgway,w+);if(fp!=NULL){rewind(fp);/*清除文本信息*/if(fwrite(&use,sizeof(use),1,fp)==1){rewind(fp);memset(ername,'\0',sizeof(ername));memset(use.password,'\0',sizeof(use.password));fscanf(fp,%s%s,ername,use.password);/////////////////////////////////此处写有问题!//fread(&use,sizeof(use),1,fp);??牰湩晴尨您保存的用户名为:%s\n,ername);??牰湩晴尨您保存的密码是:%s\n,use.password);//printf(\\n\t\t数据保存成功!\n按回车键继续...\n);//getchar();fclose(fp);}else{printf(\数据保存失败!\n按回车键继续...\n);getchar();fclose(fp);}}else{printf(\用户注册失败!\n按回车键继续...\n);getchar();fclose(fp);}fclose(fp);}教育资料word./*====================================================================用户登录信息====================================================================。