设计一个C语言程序,至少包括1个循环结构、1个选择结构和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();
int main()
{
Menu();
while(1)
{
// 读取一个字符
char ch=getch();
//打印菜单
if (ch!= '2')
{
system("cls");
Menu();
}
switch(ch)
{
case '1'://录入学生信息
InputStudent();
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 0.退出系统 *\n");
printf("***************************************\n");
}
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");
}