标题:值得纪念的一天——偶会开发软件了,特来此晒作业,有错请指正
只看楼主
多布斯的喵喵
Rank: 2
等 级:论坛游民
帖 子:133
专家分:24
注 册:2011-3-29
结帖率:94.74%
 问题点数:0 回复次数:29 
值得纪念的一天——偶会开发软件了,特来此晒作业,有错请指正
感觉这小东西很实用就与大家一起分享
1.
设计二位整数的加、减、乘算式各一题(减法算式应保证被减数大于减数)。让学生回答,由计算机给出正确与否的判断,并最后给出总得分。得分计算方法:算对加、减法各得30分,算对乘法得40分,算错得0分。然后由计算机输出询问信息,学生选择回答,以决定是否继续一次新的测验。
这个是成品
1.5.rar (33.76 KB)

程序代码:
#include<stdio.h>
#include<stdlib.h>
#include <time.h>
int main()
{
   
    int a,b,c,d,e,f,i,k,m,n,sum=0;
    char x;
    int chars;
   
   
   
    srand( time(0) );
    for(i=0;i<100;i++)
    {
        a=rand()%100;
        b=rand()%100;
        c=rand()%100;
        d=rand()%100;
        while(c<d)
        {
            c=rand()%100;
            d=rand()%100;
        }
        e=rand()%100;
        f=rand()%100;
        printf("%d+%d\n%d-%d\n%d*%d\n",a,b,c,d,e,f);
        scanf("%d",&k);
        scanf("%d",&m);
        scanf("%d",&n);
        if(k==a+b)
        {
            sum=sum+30;
            printf("第一题对!!\n");
        }
        else
            printf("第一题错\n");
        if(m==c-d)
        {
            sum=sum+30;
            printf("第二题对!!\n");
        }
        else
            printf("第二题错\n");
        if(n==e*f)
        {
            sum=sum+40;
            printf("第三题对!!\n");
        }
        else
            printf("第三题错\n");
        printf("%d分\n",sum);
        printf("按y继续?\n");
        printf("_________________________________________________\n");
        while ((chars=getchar()) != '\n' && chars != EOF);
        x=getchar();
        if(x=='y')
            continue;
        else
            break;
    }
    system("pause");
    return 0;
}
2.学生管理系统
已知有20个学生记录(包括学号、姓名、班级、性别、出生年月、成绩)的文件student.dat,所有学生以学号从小到大排序(该文件自行建立,注意学号不要连续以备插入操作)。
要 求: 编程序实现查询、排序、插入、删除等功能。具体要求如下:
(1)要求显示如下界面
 
****************************************
1--------------查询
2--------------排序
3--------------插入
4--------------删除
5--------------退出
****************************************
通过选择1-5来确定要做哪一个操作。
(2)若选1,则出现如下界面

****************************************
1.1----------按学号查询
1.2----------按姓名查询
1.3----------按成绩查询
1.4----------返回
****************************************
通过输入1-4来对应选择1.1-1.4来确定要做哪一个操作,其中:按学号查询用顺序法实现;按姓名查询用顺序法实现;按成绩查询实现查询成绩小于m分的学生;找到该生将学生记录所有信息输出到屏幕,若查无此人,输出相关信息。如果选择1.4,则返回到第(1)步的界面。
(3)若选2,则按成绩从大到小排序,姓名,学号顺序也随之调整,输出到屏幕上。
(4)若选3,输入一名新学生的记录数据,按学号顺序插入,并把结果保存到文件student.dat中。
(5)若选4,输入一名学生的学号,删除该学生的记录,并把结果保存到文件student.dat中。
(6)若选5,则退出程序。
(7)以上各个功能均编写成子函数(退出程序除外),由主函数调用实现。
成品:
2.rar (35.96 KB)

程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Student
{
    int num;
    char name[20];
    int classes;
    char sex;
    int brith;
    int grade;
    struct Student *next;
};
struct Student st[30],st1,st2[30],*p;
int b,c,ch,d,e,i,j,k,y=0,z=0;
char a[20],x;
FILE *fp;
int main ()
{
    int search1(int o);
    int search2(int o);
    int search3(int o);
    int insert(int m,int n);
    int rank();
    int delete1(int o);
    if((fp=fopen("student2.dat","rb"))==NULL)
    {
        printf("不能打开文件\n");
        return 0;
    }
    for(e=0;c=4;e++)
    {   
        printf("       ******************************\n");
        printf("              1----------查询\n");
        printf("              2----------排序\n");
        printf("              3----------插入\n");
        printf("              4----------删除\n");
        printf("              5----------退出\n");
        printf("       ******************************\n");
        p=st;
        for(i=0;i<30;i++)
        {
            fread(&st[i],sizeof(struct Student),1,fp);
            z++;
            if(st[i].next==NULL)break;
        } 
        for(i=0;i<z-1;i++)
            st[i].next=&st[i+1];
        scanf("%d",&b);
        if(b!=1)
            break;
        else
            if(b==1)
            {
                printf("       ******************************\n");
                printf("            1.1----------按学号查\n");
                printf("            1.2----------按姓名查\n");
                printf("            1.3----------按成绩查\n");
                printf("            1.4----------返回    \n");
                printf("       ******************************\n");
                scanf("%d",&c);
                if(c==1)
                {
                    search1(c);
                    break;
                }
                else
                    if(c==2)
                    {
                        search2(c);
                        break;
                    }
                    else
                        if(c==3)
                        {
                            search3(c);
                            break;
                        }
                        else
                            if(c!=4)
                            {
                                printf("输入错误\n\t\t谢谢使用\n");
                                return 0;
                            }
            }
    }
    if(b==2)
        rank(b);
   
    else
        if(b==3)
        {
            printf("需要输入几组数据\n");
            scanf("%d",&d);
            insert(b,d);
        }
        else
            if(b==4)
                delete1(b);
            else
                if(b==5)
                {
                    printf("\t\t谢谢使用\n");
                    return 0;
                }
                else
                    if(b!=1)
                    printf("输入错误!!\n");
                fclose(fp);
                printf("\t\t谢谢使用\n");
                system("pause");
                return 0;
}

int search1(int o)
{
    printf("输入学号\n");
    scanf("%d",&d);
    for(i=0;i<z;i++)
    {
        if(d>=p->num)
        {
            y++;
            if(y==1)
                printf("学号\t姓名\t班级\t性别\t出生年月\t分数\n");
            printf("%d\t%s\t%d\t%c\t%d\t\t%d\n",p->num,p->name,p->classes,p->sex,p->brith,p->grade);
            y++;
        }
        p=p->next;
    }
    if(y==0)
        printf("查无此学号\n");
    return 0;
}

int search2(int o)
{
               
                printf("输入姓名\n");
                scanf("%s",a);
                for(i=0;i<z;i++)
                {
                    fread(&st[i],sizeof(struct Student),1,fp);
                    if(strcmp(st[i].name,a)==0)
                    {
                        y++;
                        if(y==1)
                            printf("学号\t姓名\t班级\t性别\t出生年月\t分数\n");
                        printf("%d\t%s\t%d\t%c\t%d\t\t%d\n",p->num,p->name,p->classes,p->sex,p->brith,p->grade);
                    }
                    p=p->next;
                }
                if(y==0)
                    printf("查无此人\n");
                return 0;
}

int search3(int o)
{  
    printf("输入成绩\n");
    scanf("%d",&d);
    for(i=0;i<z;i++)
    {
        fread(&st[i],sizeof(struct Student),1,fp);
        if(d>=st[i].grade&&st[i].grade)
        {
            y++;
            if(y==1)
                printf("学号\t姓名\t班级\t性别\t出生年月\t分数\n");
            printf("%d\t%s\t%d\t%c\t%d\t\t%d\n",p->num,p->name,p->classes,p->sex,p->brith,p->grade);
        }
        p=p->next;
    }
    if(y==0)
        printf("查无成绩\n");
    return 0;
}

int insert(int m,int n)//可任意插入至多10组数据
{
                for(i=0;i<z-1+d;i++)
                {
                    st[i].next=&st[i+1];
                    st2[i].next=&st2[i+1];
                }
                st[z-1+d].next=NULL;
                st2[z-1+d].next=NULL;
                printf("请输入数据(以一个空格区分)\n");
                printf("学号\t姓名\t班级\t性别\t出生年月\t分数\n");
                for(i=z;i<z+d;i++)
                {
                    scanf("%d %s %d %c %d %d",&st[i].num,st[i].name,&st[i].classes,&st[i].sex,&st[i].brith,&st[i].grade);
                    fwrite(&st[i],sizeof(struct Student),1,fp);
                }
                for(i=0;i<z;i++)
                {
                    for(j=0;j<d;j++)
                        if(st[i].num==st[z+j].num)
                        {
                            y++;
                            printf("\t\t学号有重复\n");
                            return 0;
                        }               
                }
                if(y==0)
                {
                    fp=fopen("student2.dat","wb+");
                    for(i=0;i<z+d;i++)
                    {   
                        fwrite(&st[i],sizeof(struct Student),1,fp);
                        p=p->next;
                    }
                    printf("插入成功!\n");
                }
                return 0;
}

int rank()
{ 
    printf("学号\t姓名\t班级\t性别\t出生年月\t分数\n");
    for(i=0;i<z;i++,p=p->next)
        st2[i]=*p;
    for(j=0;j<z;j++)
        for(i=0;i<z-j;i++)
        if(st2[i].grade<st2[i+1].grade)
            {st1=st2[i];st2[i]=st2[i+1];st2[i+1]=st1;}
        for(i=0;i<z;i++)
            printf("%d\t%s\t%d\t%c\t%d\t\t%d\n",st2[i].num,st2[i].name,st2[i].classes,st2[i].sex,st2[i].brith,st2[i].grade);
        return 0;
}

int delete1(int o)//可任意删除n组数据
{
    printf("输入学号\n");
    scanf("%d",&d);
    for(i=0;i<z;i++)
    {
        if(p->num==d)
        {
            y++;
            k=i;
            printf("学号\t姓名\t班级\t性别\t出生年月\t分数\n");
            printf("%d\t%s\t%d\t%c\t%d\t\t%d\n",p->num,p->name,p->classes,p->sex,p->brith,p->grade);
        }
        p=p->next;
    }   
    if(y!=0)
    {
        printf("确认要删除该生信息?Y/N\n");
        while ((ch=getchar()) != '\n' && ch != EOF);
        scanf("%c",&x);
        if(x=='Y')
        {
            if(st[k].next!=NULL&&k!=0)
            {
                p=st;
                st[k-1].next=&st[k+1];
            }
            else
                if(k==0)
                    p=&st[1];
                else
                {
                    p=st;
                    st[k-1].next=NULL;
                }
                fp=fopen("student2.dat","wb+");
                for(i=0;;i++)
                {               
                    fwrite(p,sizeof(struct Student),1,fp);     
                    if(k!=0)        
                    {
                        if(p->next==NULL)
                            break;
                    }
                    else
                        if(p->next==NULL)
                            break;
                        p=p->next;       
                }
                printf("已删除\n");               
        }
        else
            if(x!='Y'||x!='N')
            {
                printf("\n输入错误\n");
                return 0;
            }
    }
    else
    {
        printf("查无此学号\n");
        return 0;
    }
    return 0;
}
搜索更多相关主题的帖子: include 计算方法 计算机 被减数 
2011-07-09 21:16
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
得分:0 
链表做的不错

                                         
===========深入<----------------->浅出============
2011-07-10 08:57
sc19861202
Rank: 2
来 自:唐山
等 级:论坛游民
帖 子:23
专家分:47
注 册:2011-3-19
得分:0 
学习中,先顶一下
2011-07-10 09:12
mandown1991
Rank: 4
等 级:业余侠客
帖 子:262
专家分:252
注 册:2011-3-2
得分:0 
顶上!
2011-07-10 10:58
mandown1991
Rank: 4
等 级:业余侠客
帖 子:262
专家分:252
注 册:2011-3-2
得分:0 
顶上!
2011-07-10 10:58
gpppa
Rank: 2
等 级:禁止发言
帖 子:47
专家分:42
注 册:2011-6-24
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2011-07-10 11:12
y515382
Rank: 2
等 级:论坛游民
帖 子:38
专家分:16
注 册:2011-7-9
得分:0 
数组,链表,递归……好多东西啊
2011-07-10 11:48
y515382
Rank: 2
等 级:论坛游民
帖 子:38
专家分:16
注 册:2011-7-9
得分:0 
srand( time(0) );
    for(i=0;i<100;i++)
再问一下,srand是什么东东?
2011-07-10 11:50
y515382
Rank: 2
等 级:论坛游民
帖 子:38
专家分:16
注 册:2011-7-9
得分:0 
e=rand()%100;
        f=rand()%100;
        printf("%d+%d\n%d-%d\n%d*%d\n",a,b,c,d,e,f);
        scanf("%d",&k);
        scanf("%d",&m);
        scanf("%d",&n);
这里可以改成这样么:
e=rand()%100;
        f=rand()%100;
        k=a+b,m=c-d,n=e*f;
        printf("%d+%d\n%d-%d\n%d*%d\n",a,b,c,d,e,f);
        printf("%d\n%d\n%d\n",&k,&m,&n);
               
      
2011-07-10 11:56
多布斯的喵喵
Rank: 2
等 级:论坛游民
帖 子:133
专家分:24
注 册:2011-3-29
得分:0 
回复 6楼 gpppa
太肤浅,不值钱…………
2011-07-10 18:34



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-345102-1-1.html




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

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