实训题目是:学生成绩管理系统
本课程实训目的:
(1)基本掌握面向过程程序设计的基本思路和方法;
(2)达到熟练掌握C语言的基本知识和技能;
(3)能够利用所学的基本知识和技能,解决简单的程序设计问题;
(4)感受C语言应用的魅力。
实训内容:
1. 学生基本信息录入及能按学期,按班级完成对学生成绩的录入;
2. 学生基本信息的修改;
3. 学生基本信息的删除;
4. 基本信息的查询(分系、班级;分科目),能查询学生成绩,不及格科目及学生名单;
5. 能按班级统计学生的成绩,求学生的总分及平均分;能按班级输出学生的成绩单;
6. 对学生考试成绩进行排名(单科按系别或班级进行排名,对每一个班级,同一学期学生总体成绩进行排名,并显示各科成绩信息)。
7. 对所开课程的成绩分析(求其平均成绩,最高分和最低分);
8. 对每系或每班各科成绩进行分析(即求单科平均成绩、及格率和优秀率);
9. 系统界面中要有帮助模块(简单介绍本系统各模块的使用方法)和退出系统模块(退出系统返回WIDNOWS界面)
提示:
学生成绩信息包括:学号,姓名,系别,班别,学期,四门课程成绩(语文,数学,英语,C语言)等。
基本要求:
1. 要求利用C语言面向过程的编程思想来完成系统的设计;
2. 突出C语言的函数特征,以多个函数实现每一个子功能;
3. 画出功能模块图;
4. 进行简单界面设计,能够实现友好的交互;
5. 具有清晰的程序流程图和数据结构的详细定义;
6. 使用文件方式存储数据,系统以菜单方式工作
7.要求写出总体设计、画出各功能流程图、详细设计、编码、测试的步骤和内容。
创新要求:
在基本要求达到后,可进行创新设计,如系统用户功能控制,对管理员级和一般级别的用户系统功能操作不同
#include<malloc.h>
#include<string.h>
#define LEN sizeof(struct record) /*对结构体长度进行宏定义*/
void menu();/*声明菜单函数*/
struct record*insert(struct record *head);/*声明添加函数 */
struct record*delet(struct record *head); /*声明删除函数 */
struct record*alter(struct record *head); /*声明修改函数 */
void search(struct record *head); /*声明查找函数*/
void show(struct record *head); /*声明显示函数*/
struct record *head; /*定义全局结构体指针变量*/
int n=0; /*定义全局变量*/
struct record /*声明结构体*/
{
char number[10];
char name[20];
char phone[20];
char adress[40];
char postcode[10];
char e_mail[30];
struct record *next;
};
/******************************************************************************
* *
* 主函数 *
* *
*******************************************************************************/
main()
{
head=NULL;
menu();
rewind(stdin);
}
/******************************************************************************
* *
* 菜单函数 *
* *
*******************************************************************************/
void menu()
{
int choice;
printf("\n\t\t******************** 主菜单 ********************");
printf("\n\t\t*********** 1-添加纪录 2-查询纪录 ************");
printf("\n\t\t*********** 3-删除纪录 4-修改记录 ************");
printf("\n\t\t*********** 5-显示纪录 6-退出系统 ************");
printf("\n\t\t************************************************");
printf("\n\t\t请选择:");
scanf("%d",&choice); rewind(stdin);
printf("\n");
switch (choice)
{
case 1:
head=insert(head);
rewind(stdin);
menu();
break;
case 2:
search(head);rewind(stdin);
menu();
break;
case 3:
head=delet(head);
rewind(stdin);
menu();
break;
case 4:
head=alter(head);
rewind(stdin);
menu();
break;
case 5:
show(head);
rewind(stdin);
menu();
break;
default:
printf("\n\t\t谢谢使用!!");
break;
}
}
/******************************************************************************
* *
* 添加函数 *
* *
*******************************************************************************/
struct record *insert(struct record *head)
{
struct record *pp,*p1,*p2;
pp=(struct record *)malloc(LEN);
printf("\n\t\t**************** 请输入用户信息 ****************\n");
printf("\n\t\t输入序号:");
scanf("%s",pp->number); rewind(stdin);
printf("\n\t\t输入姓名:");
scanf("%s",pp->name);rewind(stdin);
printf("\n\t\t输入电话号码:");
scanf("%s",pp->phone); rewind(stdin);
printf("\n\t\t输入地址:");
scanf("%s",pp->adress); rewind(stdin);
printf("\n\t\t输入邮编:");
scanf("%s",pp->postcode); rewind(stdin);
printf("\n\t\t输入e-mail:");
scanf("%s",pp->e_mail); rewind(stdin);
if(head==NULL)/*在表头插入1*/
{
head=pp;
pp->next=NULL;
}
else
{
p1=head;
while((strcmp(pp->number,p1->number)>0)&&(p1->next!=NULL))
{
p2=p1;
p1=p1->next;
}
if(strcmp(pp->number,p1->number)<=0)
{
if(head==p1)
head=pp; /*在表头插入2*/
else
p2->next=pp;/*在表中插入*/
pp->next=p1;
}
else /*在表尾插入*/
{
p1->next=pp;
pp->next=NULL;
}
}
printf("\t添加成功!请继续选择功能键!\n\n");
n=n+1;
return(head);
}
/******************************************************************************
* *
* 删除函数 *
* *
*******************************************************************************/
struct record*delet(struct record * head)
{
struct record *p1,*p2;
char number[10];
printf("\t请输入要删除用户的序号number:");
scanf("%s",&number);rewind(stdin);
if(head==NULL)
{
printf("\n\t通讯录无用户信息记录!!\n");
return(head);
}
p1=head;
while(strcmp(number,p1->number)!=0&&p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(strcmp(number,p1->number)==0)
{
if(p1==head)
{
head=p1->next;
printf("\t删除成功!请继续选择功能键!\n\n");
}
else
{
p2=p1->next;
printf("\t已删 除的用户的序号为:%s\n",number);
printf("\t删除成功!请继续选择功能键!\n\n");
}
n=n-1;
}
else printf("\t通讯录无该用户的信息记录!\n ");
return(head);
}
/******************************************************************************
* *
* 查询函数 *
* *
*******************************************************************************/
void search(struct record *head)
{
int a;
char f_name[20],f_number[10];
struct record *p1,*p2;
if(head==NULL)
{
printf("\t通讯录无用户信息记录\n");
return;
}
else
{
printf("\t请你选择你查找的方式:\n\n\t\t1:序号\n\t\t2:姓名\n");
printf("\t\t请选择:");
scanf("%d",&a);rewind(stdin);
switch(a)
{case 1:
printf("\n\t请输入要查找用户的序号number:");
scanf("%s",&f_number);rewind(stdin);
p1=head;
while(strcmp(p1->number,f_number)!=0)
{
if(p1->next==NULL)
{
printf("\n\t通讯录无此用户信息记录\n");
return;
}
else
{
p2=p1->next;
p1=p2;
}
}
printf("\n\t要查找用户的基本信息为:\n");
printf("\t\t序号: %s\n\t\t姓名:%s\n\t\t电话号码:%s",p1->number,p1->name,p1->phone);
printf("\n\t\t地址:%s\n\t\t邮编:%s\n\t\te_mail:%s\n",p1->adress,p1->postcode,p1->e_mail);
break;
case 2:
printf("\n\t请输入要查找用户的姓名name:");
scanf("%s",f_name);rewind(stdin);
p1=head;
while(strcmp(p1->name,f_name)!=0)
{
if(p1->next==NULL)
{
printf("\n\t通讯录无此用户信息记录\n");
return;
}
else
{
p2=p1->next;
p1=p2;
}
}
printf("\n\t要查找用户的基本信息为:\n");
printf("\t\t序号: %s\n\t\t姓名:%s\n\t\t电话号码:%s",p1->number,p1->name,p1->phone);
printf("\n\t\t地址:%s\n\t\t邮编:%s\n\t\te_mail:%s",p1->adress,p1->postcode,p1->e_mail);
break;
}
}
}
/******************************************************************************
* *
* 显示函数 *
* *
*******************************************************************************/
void show(struct record *head)
{
int i;
struct record *p1,*p2;
p1=head;
if(head==NULL)
{
printf("\t通讯录无用户信息记录\n");
return;
}
else
{
for(i=1;i<=n;i++)
{
printf("\n\t第%d个用户的基本信息为:",i);
printf("\n\t\t序号: %s 姓名:%s 电话号码:%s \n\t\t地址:%s 邮编:%s e_mail:%s\n"
,p1->number,p1->name,p1->phone,p1->adress,p1->postcode,p1->e_mail);
p2=p1->next;
p1=p2;
}
}
}
/******************************************************************************
* *
* 修改函数 *
* *
*******************************************************************************/
struct record*alter(struct record*head)
{
struct record *p1,*p2;
int choice1;
char alter_number[10],alter_name[20],alter_phone[20],alter_adress[40],alter_postcode[10],alter_e_mail[30],choice2;
p1=head;
if(head==NULL)
{
printf("通讯录无用户信息记录\n");
return(head);
}
printf("\t请输入要修改的用户的序号number:");
scanf("%s",alter_number);
rewind(stdin);
while(strcmp(p1->number,alter_number)!=0)
{
if(p1->next==NULL)
{
printf("\n\t通讯录无此用户信息记录\n");
return(head);
}
else
{
p2=p1;
p1=p1->next;
}
}
if(strcmp(p1->number,alter_number)!=0)
{
printf("通讯录无用户信息记录\n");
return(head);
}
else
{
printf("\t要修改的用户的基本信息为:\n\t");
printf("\t序号: %s 姓名:%s 电话号码:%s 地址:%s 邮编:%s e_mail:%s\n"
,p1->number,p1->name,p1->phone,p1->adress,p1->postcode,p1->e_mail);
}
while(1)
{
printf("\t你是否要修改的用户的基本信息?(y&n)");
scanf("%c",&choice2);
rewind(stdin);
if(choice2=='y')
{
printf("\t请选择你要修改的项目:\n\t");
printf("1:姓名 2:电话号码 3:地址 4:邮编 5:e_mail\n");
printf("\t你选择的序号为: ");
scanf("%d",&choice1);
rewind(stdin);
switch(choice1)
{case 1:printf("\t请输入更改后的姓名");
scanf("%s",alter_name);rewind(stdin);
strcpy(p1->name,alter_name);
continue;
case 2:printf("\t请输入更改后的电话号码");
scanf("%s",alter_phone);rewind(stdin);
strcpy(p1->phone,alter_phone);
continue;
case 3:printf("\t请输入更改后的地址");
scanf("%s",alter_adress);rewind(stdin);
strcpy(p1->adress,alter_adress);
continue;
case 4:printf("\t请输入更改后的邮编");
scanf("%s",&alter_postcode);rewind(stdin);strcpy(p1->postcode,alter_postcode);
continue;
case 5:printf("\t请输入更改后的e_mail");
scanf("%s",alter_e_mail);rewind(stdin);
strcpy(p1->e_mail,alter_e_mail);
continue;
}
printf("\n\t修改后用户的基本信息为:\n\t");
printf("\t序号: %s 姓名:%s 电话号码:%s 地址:%s 邮编:%s e_mail\n"
,p1->number,p1->name,p1->phone,p1->adress,p1->postcode,p1->e_mail);
}
else
{
printf("\n\t修改成功!!\n");
break;
}
}
return(head);
}本回答被提问者采纳