| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1821 人关注过本帖, 1 人收藏
标题:高难度,复杂的编程,高手请分段看
取消只看楼主 加入收藏
ZYHLouis
Rank: 1
等 级:新手上路
帖 子:17
专家分:3
注 册:2011-9-23
收藏(1)
 问题点数:0 回复次数:4 
高难度,复杂的编程,高手请分段看
//系统头文件
#include<stdio.h>
#include<stdlib.h>//exit()
#include<string.h>
#include<windows.h>

//函数声明
int password();
void mamenu();
void camenu();
void input();
void insert();
void del();
void display();
void sort();
struct student datainput();

//学生结构体
struct student
{
    int no;//学号
    char name[15];//姓名
    float eng;//英语
    float c_pro;//C语言
    float math;//数学
    float aver;//平均分
};
static int count;//用来控制数据的下标.因保证数据不丢失.用到静态变量

int main(void)
{
    system("Color 3");
    if(password()==0)//三次密码错误结果为0,正确结果为1
    {
        exit(1);//退出整个程序
    }
    do
    {
        mamenu();
    }while(1);
    return 0;
}

int password(void)
{
    char password[6];//用来输入密码
    int codenumber=3;
    printf("\n\n\n");
    printf("\t 欢迎来到学生管理系统,请输入密码登陆:\n");
    printf("\t\t\t");
    scanf("%s",password);
    //输入正确返回,错误返回,只有三次输入机会
    for(;strcmp(password,"520lcz")!=0;)
    {
        codenumber--;
        if(codenumber<=0)
        {
            break;
        }
        printf("\t 还有%d次机会:",codenumber);
        scanf("%s",password);
    }
    if(codenumber<=0)
    {
        return 0;
    }
    else
    {
        return 1;
    }
}

//系统主菜单
void mamenu(void)
{
    int selectitem=0;
    do
    {
        printf("\n\n");
        printf("\t\t______________________\n");
        printf("\t\t\22 学生成绩管理的主菜单 \22\n");
        printf("\t\t\22                      \22\n");
        printf("\t\t\22 1.学生成绩管理       \22\n");
        printf("\t\t\22 2.退               \22\n");
        printf("\t\t______________________\n");
        printf("\t\t 请选择1-2:");
        scanf("%d",&selectitem);
        //根据用户输入来进入子菜单
        switch(selectitem)
        {
            case 1:
                camenu();
                break;
            case 2:
                printf("感谢你的使用,再见");
                break;
            default:
                printf("请输入1-2之间的整数:");
        }
    }while(1);
}

void camenu(void)
{
    printf("\n\n");
    printf("\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
    printf("\t\t\22 学生管理模块的字菜单 \22\n");
    printf("\t\t\22                      \22\n");
    printf("\t\t\22 1.录入学生信息       \22\n");
    printf("\t\t\22 2.添加学生信息       \22\n");
    printf("\t\t\22 3.删除学生信息       \22\n");
    printf("\t\t\22 4.显示学生信息       \22\n");
    printf("\t\t\22 5.排序学生信息       \22\n");
    printf("\t\t\22 6.返回               \22\n");
    printf("\t\t_____________________________\n");
    printf("请选择1-5:");
    int selectitem=0;
    scanf("%d",&selectitem);
    switch(selectitem)
    {
        case 1:
            input();
            break;
        case 2:
            insert();
            break;
        case 3:
            del();
            break;
        case 4:
            display();
            break;
        case 5:
            sort();
            break;
        case 6:
            return;
        default:
            printf("请输入1-5之间的整数");
    }while(1);
}

struct student datainput()//输入
{
    struct student studn;
    printf("\n学号:");
    scanf("%d",&studn.no);
    printf("\n姓名:");
    scanf("%s",studn.name);
    printf("\n英语成绩");
    scanf("%f",&studn.eng);
    printf("\nC语言成绩");
    scanf("%f",&studn.c_pro);
    printf("\n数学成绩");
    scanf("%f",&studn.math);
    studn.aver=(studn.c_pro+studn.eng+studn.math)/3;
    return studn;
}

void input()
{
    struct student stu[100];
    char ch='y';
    while((ch=='y')||(ch=='Y'))
    {
        stu[count]=datainput();
        count++;
        printf("\n是否继续?(y or n)");
        scanf(" %c",&ch);
    }
    //增加的数据都存在stu数组中
    camenu();
}

void display()
{
    struct student test[100];
    printf("学号\t姓名\t\t英语成绩\tC语言成绩\t数学成绩\t平均分\n");
    //在把数组中的数据输出
    for(int i=0;i<count;i++)
    {
        printf("%d",test[i].no);
        printf("\t%s",test[i].name);
        printf("\t%f",test[i].eng);
        printf("\t%f",test[i].c_pro);
        printf("\t%f",test[i].math);
        printf("\t%f",test[i].aver);
        printf("\n");
    }
    camenu();
}

void sort()
{
    struct student mytest[100];
    for(int i=0;i<count-1;i++)
    {
        for(int j=0;i<count-i-1;j++)
        {
            if(mytest[j].aver<mytest[j+1].aver)
            {
                student t=mytest[j];
                mytest[j]=mytest[j+1];
                mytest[j+1]=t;
            }
        }
    }
    display();
    camenu();
}

void insert()
{
    struct student mytest[100];
    int i,j;
    count++;
    struct student temp;

    printf("\n请输入要插入的学员信息:");
    temp=datainput();
    for(i=0;i<=count;i++)
    {
        if(mytest[i].aver<temp.aver)
        {
            break;
        }
    }
    for(j=count;j>=i;j--)
    {
        mytest[j+1]=mytest[j];
    }
    mytest[i]=temp;
    camenu();
}

void del()
{
    struct student mytest[100];
    int dno;
    int i,j;
    printf("\n请输入要删除的学员的学号:");
    scanf("%d",&dno);
    //找到要删除的下标
    for(i=0;i<=count;i++)
    {
        if(mytest[i].no==dno)
        {
            break;
        }
    }
    //根据下标删除数据
    if(i!=-1)
    {
        for(j=i;j<count;j++)
        {
            mytest[i]=mytest[i+1];
        }
    }
    camenu();
}
搜索更多相关主题的帖子: 编程 声明 password display include 
2011-10-09 09:02
ZYHLouis
Rank: 1
等 级:新手上路
帖 子:17
专家分:3
注 册:2011-9-23
收藏
得分:0 
选camenu第4个总是出错,为什么?
2011-10-09 09:04
ZYHLouis
Rank: 1
等 级:新手上路
帖 子:17
专家分:3
注 册:2011-9-23
收藏
得分:0 
不是吧,高手复制调试下,我苦思好久...未果...
2011-10-09 19:49
ZYHLouis
Rank: 1
等 级:新手上路
帖 子:17
专家分:3
注 册:2011-9-23
收藏
得分:0 
不用吧,它是静态变量,之前赋值给它100
2011-10-09 21:52
ZYHLouis
Rank: 1
等 级:新手上路
帖 子:17
专家分:3
注 册:2011-9-23
收藏
得分:0 
回复 13楼 TonyDeng
嗯,对
2011-10-29 20:13
快速回复:高难度,复杂的编程,高手请分段看
数据加载中...
 
   



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

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