C语言程序设计课程设计报告
一、 系统简介
学生成绩管理系统简介:一个简易的学生成绩管理系统,它包括并可以实现:“录入并保存学生信息、打印学生信息、读取学生信息、查找学生信息、删除学生信息、修改学生信息、排序学生信息、退出系统 ”等功能,此系统需要使用者准确录入学生信息,已达到高效的工作需求。
二、 设计要求
本次课程设计要求用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语言有更加的了解。在整个编程过程中,可以说遇到了很多难题,在书和同学的
帮助下最后解决了这些问题,,我觉编写程序需要很大的耐心,当然细心也很需要,在编程的过程中有很多错误都是自己的粗心造成的,。这次的课程设计也是一次很好的对自我的检查,使我受益匪浅!
参考资料
- C程序设计(第四版),谭浩强,清华大学出版社,2010年
- C程序设计(第四版)学习辅导,谭浩强,清华大学出版社,2010年
完整代码和报告见链接:https://download.csdn.net/download/qq_45772158/12530461