C语言程序设计 课程设计报告

C语言程序设计课程设计报告

一、 系统简介

学生成绩管理系统简介:一个简易的学生成绩管理系统,它包括并可以实现:“录入并保存学生信息、打印学生信息、读取学生信息、查找学生信息、删除学生信息、修改学生信息、排序学生信息、退出系统 ”等功能,此系统需要使用者准确录入学生信息,已达到高效的工作需求。

二、 设计要求
本次课程设计要求用C语言编程实现一个小型的学生成绩管理系统,每个结构的数据可以包括学号、姓名、平时成绩、作业成绩和期末成绩等。
程序采用简单菜单驱动方式,屏幕上显示菜单如下:
1— 录入并保存学生信息
2— 打印学生信息
3— 读取学生信息
4— 查找学生信息显示
5— 删除学生信息
6— 修改学生信息
7— 排序学生信息
8— 退出系统
由两个同学组成一组分工合作完成本次课程设计。本人的主要工作包括如下内容:
1-录入并保存学生信息
2-读取学生信息
3-查找学生信息显示
4-删除学生信息

三、 程序流程图
(此部分要求画出系统的主要功能图,自己所负责具体功能模块的流程图)

C语言程序设计 课程设计报告_第1张图片

四、 程序源代码
(要求程序中要有注释,培养规范化编程习惯)
部分代码参考

	#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语言程序设计 课程设计报告_第2张图片
C语言程序设计 课程设计报告_第3张图片
C语言程序设计 课程设计报告_第4张图片
C语言程序设计 课程设计报告_第5张图片C语言程序设计 课程设计报告_第6张图片

六、 设计总结
(详述本次调试程序所取得的经验。如果程序未能通过,应分析其原因。)
学生成绩管理系统是一个十分强大的管理系统,起初刚开始做课程设计时,以为这个课设不会有多难,不过是把多个函数组合起来就好了,但是,经过这两星期的编程,发现要完整把程序按照要求编出来是一件很不容易的事情。在学习中,也对C语言有更加的了解。在整个编程过程中,可以说遇到了很多难题,在书和同学的
帮助下最后解决了这些问题,,我觉编写程序需要很大的耐心,当然细心也很需要,在编程的过程中有很多错误都是自己的粗心造成的,。这次的课程设计也是一次很好的对自我的检查,使我受益匪浅!
参考资料

  1. C程序设计(第四版),谭浩强,清华大学出版社,2010年
  2. C程序设计(第四版)学习辅导,谭浩强,清华大学出版社,2010年
    完整代码和报告见链接:https://download.csdn.net/download/qq_45772158/12530461

你可能感兴趣的:(学生成绩管理系统)