一、 系统简介
学生成绩管理系统简介:一个简易的学生成绩管理系统,它包括并可以实现:“录入并保存学生信息、打印学生信息、读取学生信息、查找学生信息、删除学生信息、修改学生信息、排序学生信息、退出系统 ”等功能,此系统需要使用者准确录入学生信息,已达到高效的工作需求。
二、 设计要求
本次课程设计要求用C语言编程实现一个小型的学生成绩管理系统,每个结构的数据可以包括学号、姓名、平时成绩、作业成绩和期末成绩等。
程序采用简单菜单驱动方式,屏幕上显示菜单如下:
1— 录入并保存学生信息
2— 打印学生信息
3— 读取学生信息
4— 查找学生信息显示
5— 删除学生信息
6— 修改学生信息
7— 排序学生信息
8— 退出系统
由两个同学组成一组分工合作完成本次课程设计。本人的主要工作包括如下内容:
1-录入并保存学生信息
2-读取学生信息
3-查找学生信息显示
4-删除学生信息
三、 程序流程图
(此部分要求画出系统的主要功能图,自己所负责具体功能模块的流程图)
四、 程序源代码
(要求程序中要有注释,培养规范化编程习惯)
部分代码参考
#include<stdio.h>
#include<conio.h>//getch的头文件
#include<stdlib.h>//system的头文件
#include<string.h>
//定义一个学生
typedef struct TagStudent
{
int Num;//学号
char Name[20];//姓名
float Ascore;//平时成绩
float Hscore;//作业成绩
float Tscore;//考试成绩
float total;//总成绩
struct TagStudent *next;//next指针变量 ,指向结构体变量
}Student;
Student *head=NULL;
void Menu();
void InputStudent();
void PrintStudent();
void ReadStudent();
void SearchStudent();
void DeleteStudent();
void ChangStudent();
void SortStudent();
void sortStrArr(Student *list, int n);
int main()
{
Menu();
while(1)
{
// 读取一个字符
char ch=getch();
//打印菜单
if (ch!= '2')
{
system("cls");
Menu();
}
switch(ch)
{
case '1'://录入学生信息
InputStudent();
break;
case '2'://打印学生信息
PrintStudent();
break;
case '3'://浏览学生信息
ReadStudent();
break;
case '4'://查找学生信息
SearchStudent();
break;
case '5'://删除学生信息
DeleteStudent();
break;
case '6'://修改学生信息
ChangStudent();
break;
case '7'://排序学生信息
SortStudent();
break;
case '0'://退出系统
printf("欢迎下次使用.");
return 0;
break;
}
}
return 0;
}
void Menu()
{
printf("========欢迎使用学生成绩管理系统=======\n");//\t表示制表符
printf("***************************************\n");
printf("*\t 请选择功能列表 *\n");
printf("***************************************\n");
printf("*\t 1.录入并保存学生信息 *\n");
printf("*\t 2.打印学生信息 *\n");
printf("*\t 3.读取学生信息 *\n");
printf("*\t 4.查找学生信息 *\n");
printf("*\t 5.删除学生信息 *\n");
printf("*\t 6.修改学生信息 *\n");
printf("*\t 7.排序学生信息 *\n");
printf("*\t 0.退出系统 *\n");
printf("***************************************\n");
}
//创建一个保存链表
Student *savestudent(Student *p)
{
Student *head=p;
FILE *fp=fopen("E:\\student.txt","w");
if(fp==NULL)
{
printf("打开文件失败\n");
return NULL;
}
//写入数据
while(head!=NULL)
{
fprintf(fp,"%d %s %.2f %.2f %.2f\n",head->Num,
head->Name,
head->Ascore,
head->Hscore,
head->Tscore);
head=head->next;
}
fclose(fp);
return p;
}
//录入学生信息
void InputStudent()
{
Student* p=head;//当前节点
//找到尾节点
while(head!=NULL&&p->next!=NULL)
{
p=p->next;
}
//定一个新节点
Student *NewNode=(Student*)malloc(sizeof(Student));
NewNode->next=NULL;
if(head==NULL)
{
head=NewNode;
}
else{
p->next=NewNode;
}
printf("\n请输入学生信息\n ");
//输入新的学元数据
printf(" 学号:");
scanf("%d", &NewNode->Num);
printf(" 姓名:");
scanf("%s", NewNode->Name);
printf(" 平时成绩:");
scanf("%f", &NewNode->Ascore);
printf(" 作业成绩:");
scanf("%f", &NewNode->Hscore);
printf(" 考试成绩:");
scanf("%f", &NewNode->Tscore);
FILE *fp=fopen("E:\\student.txt","a");
if(fp==NULL)
{
printf("打开文件失败\n");
return ;
}
//写入数据
while(p!=NULL)
{
fprintf(fp,"%d %s %.2f %.2f %.2f\n",p->Num,
p->Name,
p->Ascore,
p->Hscore,
p->Tscore);
p=p->next;
}
fclose(fp);
printf("学生信息录取并保存成功!\n");
}
// 创建生成链表并返回
Student *createLine(FILE *fp)
{
Student *head, *p1, *p2;
p1 = p2 = (Student*) malloc(sizeof(Student));//开辟一个新单元
head = p1;
while(!feof(fp))//feof(fp)文件未结束输出0
{
fscanf(fp,"%d%s%f%f%f\n",&p1->Num,
p1->Name,
&p1->Ascore,
&p1->Hscore,
&p1->Tscore);
p2 = p1;
p1 = (Student*) malloc(sizeof(Student));
p2->next = p1;
}
if (head->Name[0] == '\0') head = NULL;
else p2->next = NULL;
return head;
}
// 从文件读取数据并生成返回链表 ,从文件中获取数据生成链表并返回链表的头指针
Student *readFiles()
{
Student *head;
FILE *fp = fopen("E:\\student.txt", "r");
if(fp == NULL)
{
printf("打开文件失败!");
return NULL;
}
head = createLine(fp);
fclose(fp);
return head;
}
//读取学生信息
void ReadStudent()
{ //打开文件
Student *p = readFiles();
printf("学号\t姓名\t平时成绩\t作业成绩\t考试成绩\n");
while(p!=NULL)
{
printf("%d \t%s \t%.2f \t%.2f \t%.2f \n",
p->Num,
p->Name,
p->Ascore,
p->Hscore,
p->Tscore);
p=p->next;
}
}
//查找学生信息
void SearchStudent()
{
Student *p = readFiles();
char searchname[10];//空的字符数组;
printf("\n请输入你要查找的学生名字:");
scanf("%s",searchname);
while(strcmp(p->Name,searchname)!=0)
{
if(p->next==NULL)
{
printf("没有此学生的信息\n");
return ;
}
p=p->next;
}
printf(" 学号:\t姓名:\t平时成绩:\t作业成绩:\t考试成绩:\n");
printf(" %d \t%s %.2f %.2f %.2f \n",
p->Num,
p->Name,
p->Ascore,
p->Hscore,
p->Tscore);
}
五、 运行结果及分析
(要求有程序运行结果截图和相应的分析)
六、 设计总结
(详述本次调试程序所取得的经验。如果程序未能通过,应分析其原因。)
学生成绩管理系统是一个十分强大的管理系统,起初刚开始做课程设计时,以为这个课设不会有多难,不过是把多个函数组合起来就好了,但是,经过这两星期的编程,发现要完整把程序按照要求编出来是一件很不容易的事情。在学习中,也对C语言有更加的了解。在整个编程过程中,可以说遇到了很多难题,在书和同学的
帮助下最后解决了这些问题,,我觉编写程序需要很大的耐心,当然细心也很需要,在编程的过程中有很多错误都是自己的粗心造成的,。这次的课程设计也是一次很好的对自我的检查,使我受益匪浅!
参考资料