| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2827 人关注过本帖
标题:怎样插入是否继续(y/n)这个语句!
只看楼主 加入收藏
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
/*  数组版 */

#include <stdio.h>
#define N 10

struct student
{
    int num;
    char name[15];
    float score1;
    float score2;
    float average;
};

int yorn(char * str);    // [Y/N] 函数原型,输入了Y或y返回1,输入N或n返回0
int del(struct student * ar, int num, int * n); // 删除学好为num的那个学生的信息
int sorter(struct student * ar, int n);       // 按平均分排序 >
void show(struct student * ar, int n);        // 显示学生信息
void Input(struct student * p);               // 输入学生信息


int main(void)
{
    int ans, j, i = 0;   /* i 统计数组中的数据个数,最多N条数据 */
    int ch;
   
    struct student stu[N];
   
    while(ch != 'q')   /* 即: 不退出 */
    {
        // Menu
        printf("**** 学生信息 ****\n"
               "A 添加    D 删除\n"
               "S 显示    R 排序\n"
               "Q 退出\n\n");
        printf("请选择: ");

        ch = getchar();
        
        putchar('\n');
        
        switch(ch)
        {
            case 'a':
            case 'A':
                ans = 1;
                while(i < N && ans)
                {
                    printf("请输入第%d个学员的信息:\n",i+1);
                    
                    Input(&stu[i]);    /* 输入信息 */

                    putchar('\n');
                    if((i + 1) < N)
                        ans = yorn("下一个学生");
                    i++;
                }
                break;
            case 'd':
            case 'D':
                printf("删除那个学生的成绩: ");
                scanf("%d", &j);
                if(del(stu, j, &i) == 1)
                    puts("删除成功!");
                else
                    puts("删除失败!");
                break;
            case 's':
            case 'S':
                show(stu, i);
                putchar('\n');
                break;
            case 'r':
            case 'R':
                sorter(stu, i);
                puts("排序结束.");
                break;
            case 'Q':
                ch = 'q';
                break;
            default :
                break;
        }
        fflush(stdin);
        putchar('\n');
    }

    return 0;
}


int yorn(char * str)
{
    int ch;
    printf("%s [Y/N]... ", str);
    while((ch = getchar()) == EOF
           || (ch != 'y' && ch != 'Y' && ch != 'n' && ch != 'N') )
    {
        printf("[Y/N]... ");
        fflush(stdin);
    }
    fflush(stdin);
    putchar('\n');
    return ((ch == 'Y' || ch == 'y') ? 1 : 0);
}

void show(struct student * ar, int n)
{
    int i;
    putchar('\n');
    if(n == 0)
        puts("没有数据!");
        
    for(i = 0; i < n; i++)
    {
        printf("%d号 %s : \n", ar[i].num, ar[i].name);
        printf("C: %.1f分 Java: %.1f分\n\n", ar[i].score1, ar[i].score2);
    }
}

void Input(struct student * p)
{
    printf("学号:");
    scanf("%d", &p->num);
    fflush(stdin);

    printf("姓名:");
    gets(p->name);

    printf("C课程成绩:");
    scanf("%f", &p->score1);
    fflush(stdin);

    printf("java课程成绩:");
    scanf("%f", &p->score2);
    fflush(stdin);
   
    p->average = (p->score1 + p->score2) / 2;
}

int sorter(struct student * ar, int n)
{
    int i, j;
    struct student temp;
   
    if(ar == NULL || n == 0)
        return 0;
        
    for(i = 0; i < (n - 1); i++)
    {
        for(j = i + 1; j < n; j++)
        {
            if(ar[i].average < ar[j].average)
            {
                temp = ar[i];
                ar[i] = ar[j];
                ar[j] = temp;
            }
        }
    }
   
    return 1;
}

int del(struct student * ar, int num, int * n)
{
    int i;
    if(*n < 1)
        return 0;

    for(i = 0; i < *n; i++)
        if(ar[i].num == num)
            break;
    if(i < *n)
    {
        while(i < (*n - 1))
        {
            ar[i] = ar[i + 1];
            i++;
        }
        
        (*n)--;
        return 1;
    }
    else
        return 0;
}

// i 统计数组中的数据个数,最多N条数据
// 在输入学生完成绩后,函数计算该学生的平均分
// 删除操作的实现:用要删除项目后面的元素覆盖上去
//



[[italic] 本帖最后由 cosdos 于 2007-12-12 13:14 编辑 [/italic]]

—>〉Sun〈<—
2007-12-11 20:39
billtob
Rank: 1
等 级:新手上路
帖 子:64
专家分:0
注 册:2007-11-17
收藏
得分:0 
谢谢啦!
2007-12-11 22:18
快速回复:怎样插入是否继续(y/n)这个语句!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015022 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved