C语言学生管理系统(源代码)_第1页
C语言学生管理系统(源代码)_第2页
C语言学生管理系统(源代码)_第3页
C语言学生管理系统(源代码)_第4页
C语言学生管理系统(源代码)_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

1、#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#define M 50const char strStudentFilePath = "studentInfo.txt"const char strCourseFilePath = "courseInfo.txt"typedef struct MyIntint num;struct MyInt *next;CourseNumList, ScoreList;st

2、ruct studentint num;char name20;char sex;CourseNumList* courseNumList; /存放的是课程的序号ScoreList* courseScore; /与上一个列表相对应的课程的成绩int courseSize;int ave;stuM;typedef struct student Student;int stuNum; /系统中存在的学生的记录数typedef struct Courseint numCourse;char name20;char teacherName20;struct Course *next;CourseLis

3、t;CourseList *pCourse = NULL; /头指针CourseList *currentPoint = NULL; /工作指针/* 函数名:Initialize 作用:初始化系统的显示标头 参数: 返回值:*/void Initialize()printf("tt*nn");printf("tt学生成绩管理系统-C语言版 n");printf("n");printf("tt CopyRight Maode,YAN n");printf("n");printf("tt*

4、nn");/* 函数名:Exit 作用:当系统需要退出时,调用此函数停屏,与使用者交互 参数: 返回值:*/void Exit()printf("input any key to quit!");getch();exit(0);void Save();/* 函数名:InputStudentInfo 作用:输入学生信息,并保存在内存中 参数: 返回值: 创建日期:2012-05-13 By Maode,Yan*/void InputStudentInfo()int i;char isSave;printf("n开始输入学生信息,建立学生信息表:n"

5、;);printf("请输入学生人数:");scanf("%d", &stuNum);if (stuNum > M)printf("输入的学生数超过人数上线!系统退出!");Exit();for(i = 0; i < stuNum; i+)printf("请输入第%d个学生的学号:n", i);scanf("%d", &stui.num);printf("请输入第%d个学生的姓名:n", i);scanf("%s", stui.

6、name);fflush(stdin);printf("请输入第%d个学生的性别(Y代表男,N代表女):n", i);scanf("%c", &stui.sex);stui.courseNumList = NULL;stui.courseScore = NULL;stui.courseSize = 0;stui.ave = 0;fflush(stdin);printf("是否保存学生信息到文件?Y:保存,N:不保存:");scanf("%c", &isSave);if (isSave = '

7、Y' | isSave = 'y')Save(0); /0代表保存的是学生信息printf("保存学生信息到文件操作已经完成!");elsefflush(stdin);printf("选择不保存!学生信息是系统运行基础,您确认不保存直接退出?Y:保存, N:不保存:");scanf("%c", &isSave);if (isSave != 'Y' && isSave != 'y')exit(0);elseSave(0);printf("保存课程信

8、息到文件操作已经完成!");/* 函数名:ShowOneStudentInfoWithoutScores 作用:输出学生信息,不包括成绩,仅仅有学号,名字和性别三个信息 参数:带输出学生的学号 返回值:*/void ShowOneStudentInfoWithoutScores(int StudentNum)int k;int i = StudentNum;int leaveRoom;char temp8;memset(temp, '0', 8);ltoa(stui.num, temp, 10);leaveRoom = 6 - strlen(temp);printf(

9、"%d", stui.num);for (k = 0; k < leaveRoom; k+)printf(" ");memset(temp, '0', 8);leaveRoom = 0;leaveRoom = 8 - strlen();printf("%s", );for (k = 0; k < leaveRoom; k+)printf(" ");leaveRoom = 0;if ('Y' = stui.sex | 'y'

10、; = stui.sex)printf("男");elseprintf("女");for (k = 0; k < 4; k+)printf(" ");/* 函数名:InputCourseInfo 作用:输入课程信息 参数: 返回值:*/void InputCourseInfo()int courseSize;char isSave;char isContinue;courseSize = 0;printf("n开始输入课程,建立课程信息表:n");while(1)fflush(stdin);printf(&q

11、uot;如果输入完毕,请输入字符q结束输入 ,继续输入请输入字符n:");scanf("%c", &isContinue);if ('n' != isContinue && 'N' != isContinue) /如果输入不是继续,则退出break;elseCourseList *newPoint = (CourseList*)malloc(sizeof(struct Course);if (newPoint = NULL)printf("添加信息内存分配失败,按任意键退出系统");get

12、ch();exit(0);elsefflush(stdin);printf("请输入课程号:n");scanf("%d", &(newPoint->numCourse);fflush(stdin);printf("请输入课程名称:n");scanf("%s", newPoint->name);fflush(stdin);printf("请输入任课教师名称:n");scanf("%s", newPoint->teacherName);if (NULL

13、= pCourse)currentPoint = newPoint;pCourse = currentPoint;elsecurrentPoint->next = newPoint;currentPoint = newPoint;printf("添加第%d个课程记录成功!", +courseSize);currentPoint->next = NULL;fflush(stdin);printf("是否保存课程信息到文件?Y:保存,N:不保存:");scanf("%c", &isSave);if (isSave =

14、'Y' | isSave = 'y')Save(1); /1代表保存的是课程信息printf("保存课程信息到文件操作已经完成!");elsefflush(stdin);printf("选择不保存!课程信息是系统运行基础,您确认不保存直接退出?Y:保存, N:不保存:");scanf("%c", &isSave);if (isSave != 'Y' && isSave != 'y')exit(0);elseSave(1);printf("

15、保存课程信息到文件操作已经完成!n");/* 函数名称:ShowCourseInfoWithouScores 作用:显示所有课程的信息 参数: 返回值:*/void ShowCourseInfoWithouScores()int k;int leaveRoom;char temp10; /默认汉字不能超过4个字(强制条件,教学使用,不考虑健壮性,可留成作业供学生讨论)currentPoint = pCourse;if (currentPoint = NULL)printf("没有课程信息可以显示!");return;domemset(temp, '0

16、9;, 10);ltoa(currentPoint->numCourse, temp, 10);leaveRoom = 6 - strlen(temp);printf("%d", currentPoint->numCourse);for (k = 0; k < leaveRoom; k+)printf(" ");memset(temp, '0', 10);leaveRoom = 0;leaveRoom = 10 - strlen(currentPoint->name);printf("%s",

17、currentPoint->name);for (k = 0; k < leaveRoom; k+)printf(" ");memset(temp, '0', 10);leaveRoom = 0;leaveRoom = 10 - strlen(currentPoint->teacherName);printf("%s", currentPoint->teacherName);for (k = 0; k < leaveRoom; k+)printf(" ");memset(temp, 

18、9;0', 10);leaveRoom = 0;currentPoint = currentPoint->next;printf("n"); while (currentPoint != NULL);/* 函数名称:GetCourseName 作用:根据课程编号,获得课程名字供显示学生所有信息时调用 参数:待查找名字的课程的编号 返回值:根据课程编号查找到的课程的名字*/char* GetCourseName(int CourseNum)CourseList* index = pCourse;doif (index->numCourse = Course

19、Num)return index->name;elseindex = index->next; while (index != NULL);return ""/* 函数名称:ShowOneStudentInfo 作用:显示一个指定学生的全部信息,包括学号、姓名、性别和所选课程名字以及其成绩 参数:待显示学生的学号 返回值:*/void ShowOneStudentInfo(int StudentNum)int i, j, k;int leaveRoom;int courseNum; /记录当前学生记录中课程的个数int aScore; /记录某课程的成绩char

20、 temp8;int strLength = 0;Student* studentInfo = NULL;memset(temp, '0', 8);printf("t*学生信息*n");printf("学号姓名性别 ");for (i = 0; i < stuNum; i+)if (stui.num != StudentNum)continue;elsestudentInfo = &stui;break;courseNum = studentInfo->courseSize;if (courseNum != 0)for

21、 (j = 0; j < courseNum; j+)int courseNum = -1;CourseNumList* currentItem = studentInfo->courseNumList;for (k = 0; k < j; k+)currentItem = currentItem->next;courseNum = currentItem->num;leaveRoom = 10 - strlen(GetCourseName(courseNum);printf("%s", GetCourseName(courseNum);for

22、 (k = 0; k < leaveRoom; k+)printf(" ");printf("平均成绩 ");printf("n");/打印学生信息ShowOneStudentInfoWithoutScores(i);if (courseNum = 0)printf("n");elsefor(j = 0; j < courseNum; j+)ScoreList* currentItem = studentInfo->courseScore;for (k = 0; k < j; k+)curr

23、entItem = currentItem->next;aScore = -1;aScore = currentItem->num;itoa(aScore, temp, 10);leaveRoom = 10 - strlen(temp);printf("%d", aScore);for (k = 0; k < leaveRoom; k+)printf(" ");memset(temp, '0', 8);leaveRoom = 0;itoa(stui.ave, temp, 10);leaveRoom = 10 - strl

24、en(temp);printf("%d", stui.ave);for (k = 0; k < leaveRoom; k+)printf(" ");memset(temp, '0', 8);leaveRoom = 0;printf("n");/* 函数名称:Average 作用:计算某学生的所有课程的平均成绩并保存于内存中 参数:学生在学生信息表中的位置 返回值:*/void Average(int iTem)int sum = 0;ScoreList* currentItem = stuiTem.courseS

25、core;while(currentItem != NULL)sum += currentItem->num;currentItem = currentItem->next;if (stuiTem.courseSize != 0)stuiTem.ave = sum / stuiTem.courseSize;elsestuiTem.ave = 0;/* 函数名称:CalcAve4AllStudents 作用:计算所有学生的平均成绩,调用单个计算平均成绩函数来完成操作 参数: 返回值:*/void CalcAve4AllStudents()int i = 0;for (; i <

26、 stuNum; i+)Average(i);/* 函数名称:SaveStudentInfo 作用:保存学生信息到文件,文件名是预定义的,在当前路径下的studentInfo.txt,保存的学生信息不包括学生个数和平均成绩这类可以计算出来的,仅仅包含基本信息和成绩元数据。 参数:0 代表保存不成功,1 代表返回成功 返回值:*/int SaveStudentInfo()int i;FILE *pFile = fopen(strStudentFilePath, "w");if (pFile = NULL)return 0;for (i = 0; i < stuNum;

27、i+)char context100;char strNumStudent10;char strSex2;CourseNumList* currentItem = stui.courseNumList;ScoreList* currentItem2 = stui.courseScore;memset(context, '0', 100);memset(strNumStudent, '0', 10);memset(strSex, '0', 2);_itoa(stui.num, strNumStudent, 10);strcat(context, s

28、trNumStudent);strcat(context, " ");strcat(context, );strcat(context, " ");strSex0 = stui.sex;strcat(context, strSex);strcat(context, " ");while(currentItem != NULL)char courseNumOrScore10;memset(courseNumOrScore, '0', 10);_itoa(currentItem->num, cour

29、seNumOrScore, 10);strcat(context, courseNumOrScore);strcat(context, " ");memset(courseNumOrScore, '0', 10);_itoa(currentItem2->num, courseNumOrScore, 10);strcat(context, courseNumOrScore);strcat(context, " ");currentItem = currentItem->next;currentItem2 = currentIte

30、m2->next;strcat(context, "rn");fwrite(context, strlen(context), 1, pFile);fclose(pFile);return 1;/* 函数名称:SaveCourseInfo 作用:保存课程信息到文件,文件名是预定义的,在当前路径下的courseInfo.txt 参数: 返回值:0保存不成功,1保存成功*/int SaveCourseInfo()FILE *pFile = fopen(strCourseFilePath, "w");CourseList* currentItem = p

31、Course;if (pFile = NULL)return 0;while (currentItem != NULL)char context100;char strNumCourse10;memset(context, '0', 100);memset(strNumCourse, '0', 10);_itoa(currentItem->numCourse, strNumCourse, 10);strcat(context, strNumCourse);strcat(context, " ");strcat(context, curr

32、entItem->name);strcat(context, " ");strcat(context, currentItem->teacherName);strcat(context, " rn");fwrite(context, strlen(context), 1, pFile);currentItem = currentItem->next;fclose(pFile);return 1;/* 函数名称:GetStudentInfoFromFile 作用:从文件中读取学生信息,并将其初始化入内存,形成学生信息数组。 参数: 返回值

33、:*/void GetStudentInfoFromFile()int pos = 0;int i, j;char* workPoint;char contextLine100;int itemPos = 0;char context2Mem50;FILE *pFile = fopen(strStudentFilePath, "r");if (pFile = NULL)printf("本地学生信息数据文件没有找到!");Exit();while (1)CourseNumList* currentItem = NULL;ScoreList* current

34、Item2 = NULL;stupos.courseNumList = NULL;stupos.courseScore = NULL;itemPos = 0;memset(contextLine, '0', 100);if (NULL = fgets(contextLine, 100, pFile)break;workPoint = contextLine;for (i = 0; i < strlen(workPoint); i+)if (workPointi != ' ')continue;elseif (workPointi+1 = ' 

35、9;) /此时确定i为分割符的位置memset(context2Mem, '0', 50);memcpy(context2Mem, workPoint, i);switch (itemPos)case 0:stupos.num = atoi(context2Mem);break;case 1:for (j = 0; j < strlen(context2Mem) + 1; j+)j = context2Memj;break;case 2:stupos.sex = context2Mem0;break;default:break;/链表操作if (it

36、emPos > 2)if (itemPos % 2)CourseNumList* newItemCourseNum = malloc(sizeof(CourseNumList);newItemCourseNum->next = NULL;newItemCourseNum->num = atoi(context2Mem);if (stupos.courseNumList = NULL)currentItem = newItemCourseNum;stupos.courseNumList = newItemCourseNum;elsecurrentItem->next =

37、newItemCourseNum;currentItem = currentItem->next;elseScoreList* newItemScore = malloc(sizeof(ScoreList);newItemScore->next = NULL;newItemScore->num = atoi(context2Mem);if (stupos.courseScore = NULL)currentItem2 = newItemScore;stupos.courseScore = newItemScore;elsecurrentItem2->next = new

38、ItemScore;currentItem2 = currentItem2->next;itemPos+;workPoint = &(workPointi+2);i = 0;stupos.courseSize = (itemPos - 3) / 2;pos+;stuNum = pos;/* 函数名称:GetCourseInfoFromFile 作用:从文件中读取课程信息,并将其初始化入内存,形成课程信息链表 参数: 返回值:*/void GetCourseInfoFromFile()char contextLine100;char* workPoint;int i, j;int

39、itemPos;char context2Mem50;FILE *pFile = fopen(strCourseFilePath, "r");CourseList* currentItem;CourseList* newItem;if (pFile = NULL)printf("本地课程信息文件没有找到!");Exit();while(1)memset(contextLine, '0', 100);if (NULL = fgets(contextLine, 100, pFile)break;/printf("%s",

40、contextLine);newItem = malloc(sizeof(CourseList);if (newItem = NULL)printf("内存分派失败,系统退出!");Exit();newItem->next = NULL;workPoint = contextLine;itemPos = 0;for (i = 0; i < strlen(workPoint); i+) /将一条信息进行读取并生成一个新的课程记录if (workPointi != ' ')continue;elseif (workPointi+1 = ' &

41、#39;) /此时确定i为分割符的位置memset(context2Mem, '0', 50);memcpy(context2Mem, workPoint, i);switch (itemPos)case 0:newItem->numCourse = atoi(context2Mem);break;case 1:for (j = 0; j < strlen(context2Mem) + 1; j+)newItem->namej = context2Memj;break;case 2:for (j = 0; j < strlen(context2Mem) + 1; j+)newItem->teacherNamej = context2Memj;break;default:break;itemP

温馨提示

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

评论

0/150

提交评论