注册 登录
编程论坛 C语言论坛

请大神帮忙看一下

巿亘 发布于 2018-06-22 02:57, 1043 次点击
(1)  数据录入功能:  对B.TXT进行数据录入,只录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据. 综合成绩、学分由程序根据条件自动运算。
 综合成绩的计算:如果本课程的实验成绩为-1,则表示无实验,综合成绩=平时成绩*30%+卷面成绩*70%; 如果实验成绩不为-1,表示本课程有实验,综合成绩=平时成绩*15%+实验成绩*.15%+卷面成绩*70% .
  实得学分的计算: 采用等级学分制.
综合成绩在90-100之间 ,应得学分=学分*100% 综合成绩在80-90之间 ,应得学分=学分*80%
综合成绩在70-80之间 ,应得学分=学分*75%  综合成绩在60-70之间 ,应得学分=学分*60%
综合成绩在60以下 ,应得学分=学分*0%
(2)查询功能:分为学生基本情况查询和成绩查询两种
A:学生基本情况查询:
A1----输入一个学号或姓名(可实现选择),查出此生的基本信息并显示输出。
A2---输入一个宿舍号码,可查询出本室所有的学生的基本信息并显示输出。
  B:成绩查询:
B1:输入一个学号时,查询出此生的所有课程情况,格式如下:
学    号:xx       姓    名:xxxxx
课程编号:xxx      课程名称:xxxxx    综合成绩:xxxx   实得学分: xx
课程编号:xxx      课程名称:xxxxx    综合成绩:xxxx   实得学分: xx
课程编号:xxx      课程名称:xxxxx    综合成绩:xxxx   实得学分: xx
…     …       …       …     ………   …     …     
共修:xx科,实得总学分为: xxx
(3)删除功能:当在A.TXT中删除一个学生时,自动地在B.TXT中删除此人所有信息。
 (4 ) 排序功能:能实现选择按综合成绩或实得学分升序或降序排序并显示数据。

#include <stdio.h>
#include <stdlib.h>
#include<windows.h>
#include<conio.h>
int stuNum=0;
void  menu();//主页面菜单;
void loadtxt();//导入学生名单 ,学号需小于九位 ,导入的txt文件里,请以学生姓名加上学生学号的格式
void displayStuds();//显示学生名单
void inputStusScore();//录入学生的成绩
void SearchStu();//按学号查找学生成绩
void ScoreSortup();//按成绩排序 ,升序
void ScoreSortdown();//降序
void del();//删除学生
void sava();//保存到txt文档
struct StudentStyle
{
    char  StudentName[10];
    int  StudentId;
    int  StudentScore;
};

struct StudentStyle stus[100];

int main()
{     int t;
      int i;
           menu();//显示菜单
        scanf("%d",&t);
           system("cls");//清屏
while(1)
{    switch(t)
 {      case 0:exit(0);
        case 1: loadtxt();break;
        case 2: displayStuds();break;
        case 3: inputStusScore();break;
        case 4: SearchStu(); break;
        case 5: ScoreSortup();break;
        case 6:    ScoreSortdown() ;break;
        case 7:    del() ;break;
        case 8: sava(); break;
        default:printf("\n输入错误,请检查后重新输入\n");
            }      
        system("pause");//暂停
        getchar();//接收回车键
        menu();//再次显示菜单
        scanf("%d",&t);  
        system("cls");
        
         
 }
 
    return 0;
}
void  menu()
{       system("cls");
         HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);  //获取控制台的句柄
         printf("\n\n\n\n\n");
  printf("\t\t|---------------------学生成绩管理系统-------------------|\n");
  printf("\t\t|\t 0. 离开                                         |\n");
  printf("\t\t|\t 1. 导入学生名单 (名单内请以姓名加上学号的格式)  |\n");
  printf("\t\t|\t 2. 显示学生名单                                |\n");
  printf("\t\t|\t 3. 输入学生成绩                                    |\n");
  printf("\t\t|\t 4. 查找某个学生的信息                           |\n");
  printf("\t\t|\t 5. 按成绩降序排列学生名单                       |\n");
  printf("\t\t|\t 6. 按成绩升序排列学生名单                       |\n");
  printf("\t\t|\t 7. 删除某个学生的信息                           |\n");
  printf("\t\t|\t 8. 保存到txt文档(若无指定文件系统自动新建)      |\n");
  printf("\t\t|--------------------------------------------------------|\n\n");

}
void   loadtxt()
{
    //1.确定文件名
    char fileName[100];
    printf("请输入包含学生名单的文件名,要求文本文件,包含学号、姓名:\n");
    //gets(fileName);//2.打开文件
    scanf("%s",fileName);
    FILE *fp;
    int i;
    int result=1;
    fp = fopen(fileName,"r");//3. 读数据,保存到stu数组
    if(fp==NULL)
    {
        printf("文件不存在,请检查后重试\n");
    }
    else {
        for(i=0; result!=-1;i++)
    {
        result=fscanf(fp,"%s%d",stus[i].StudentName,&stus[i].StudentId);
        //printf("%d  ",result);
    }

    stuNum = i-1;
    Sleep(1000);
    system("color 7");
    printf("导入成功!\n");
    }
   
    fclose(fp);
    }
void displayStuds()
{
    system("cls");
    printf("姓名\t学号\n");
    int i;
     for(i=0;i<stuNum;i++)
    {
        printf("%s\t%d\n",stus[i].StudentName,stus[i].StudentId);
    }
    Sleep(1000);
    system("color 2");
    printf("显示成功!\n");
    getch();
   
   
}
void inputStusScore()
{   system("cls");
       printf("成绩录入\n");
    int i;
    for(i=0;i<stuNum;i++)
    {
        printf("%d\t%s\t成绩:",stus[i].StudentId,stus[i].StudentName);
        scanf("%d",&stus[i].StudentScore);
    }
    Sleep(1000);
    system("color 2");
    printf("录入成功!\n");
    getchar();

}
void SearchStu()
{
    system("cls");
       printf("请输入学生的学号:\n");
    int i;
    int stusid;
    scanf("%d",&stusid);
    for(i=0;i<stuNum;i++)
    {   
        if(stus[i].StudentId==stusid)
        {
            printf("学号:%d\t姓名:%s\t成绩:%d\n",stus[i].StudentId,stus[i].StudentName,stus[i].StudentScore);
            Sleep(2000);
            system("color 2");
            printf("查找成功!\n");
            break;
        }
        else  continue;
    }
    if(i>=stuNum){
        Sleep(1000);
        system("color 2");
        printf("对不起,没有查到该同学的信息,请重试!\n");
    }
         getch();
}
void ScoreSortup()
{
    system("cls");
    printf("\n\n\n\n\n");
    Sleep(1000);
    printf("\t\t|---------------------成绩排序如下-------------------|\n");
    int i;
    int j;
    struct StudentStyle temp;
     for(i=0;i<stuNum-1;i++)
    {
        for(j=0;j<stuNum-1;j++)
        {
            if(stus[j].StudentScore<stus[j+1].StudentScore)
            {
               temp=stus[j];
               stus[j]=stus[j+1];
               stus[j+1]=temp;
            }
        }
        
    }
    for(i=0;i<stuNum;i++)
    {
        printf("学号:%d\t姓名:%s\t成绩:%d\n",stus[i].StudentId,stus[i].StudentName,stus[i].StudentScore);
   
    }
    Sleep(1000);
    system("color 2");
    printf("排序已完成!\n");
    getch();
   
}
void ScoreSortdown()
{
    system("cls");
    printf("\n\n\n\n\n");
    Sleep(1000);
    printf("\t\t|---------------------成绩排序如下-------------------|\n");
    int i;
    int j;
    struct StudentStyle temp;
     for(i=0;i<stuNum-1;i++)
    {
        for(j=0;j<stuNum-1;j++)
        {
            if(stus[j].StudentScore>stus[j+1].StudentScore)
            {
               temp=stus[j];
               stus[j]=stus[j+1];
               stus[j+1]=temp;
            }
        }
        
    }
    for(i=0;i<stuNum;i++)
    {
        printf("学号:%d\t姓名:%s\t成绩:%d\n",stus[i].StudentId,stus[i].StudentName,stus[i].StudentScore);
   
    }
    Sleep(1000);
    system("color 2");
    printf("排序已完成!\n");
    getch();
   
}
void del()
{
    system("cls");
    int stusid;
    char ch[2];
    int i;
    int j;
    int t;
    int stuNum1=stuNum;//全局变量赋值给局部变量
    printf("请输入要删除的学生的学号:\n");
    scanf("%d",&stusid);
    for(i=0;i<stuNum;i++)
    {
            if(stus[i].StudentId==stusid){
                printf("已经找到%s同学信息,是否删除?(y/n)\n",stus[i].StudentName);
                break;
            }
            
            
    }
   
    Sleep(1000);
    system("color 2");
    if(i>=stuNum){
        printf("该同学信息不存在,即将返回主菜单");
        Sleep(1000);
        system("cls");
        menu();
    }
    scanf("%s",ch);
    if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)//判断是否删除
    {
        for(j=i;j<stuNum1;j++)
        {
            stus[j]=stus[j+1];
            
        }
        stuNum1--;
        Sleep(1000);
        system("color 2");
        printf("删除成功\n");
        getch();
     }
     else
         Sleep(1000);
         printf("即将返回主菜单");
         Sleep(500);
         system("cls");
         Sleep(1000);
         menu();
            
    }
void sava()
{
   
    char fileName[100];
    printf("请输入保存的文件名以及路径:\n");
    scanf("%s",fileName);
    FILE *fp;
    fp = fopen(fileName,"a+");
    int i;
    for(i=0;i<stuNum;i++)
    {
        fprintf(fp,"学号:%d\t姓名:%s\t成绩:%d\n",stus[i].StudentId,stus[i].StudentName,stus[i].StudentScore);
        
    }
    fclose(fp);
    Sleep(1000);
    system("color 2");
    printf("保存成功\n");
    getch();
   
 }
能力就到这了真的写不动了,求大神指导一下
0 回复
1