首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C程序编程,求相助!

2013-06-26 
C程序编程,急求帮助!!!!我写了一个程序200多行吧大概,检查没错,但一运行,在选择功能模块输入后突然就停止

C程序编程,急求帮助!!!!
我写了一个程序200多行吧大概,检查没错,但一运行,在选择功能模块输入后突然就停止工作了。
求帮忙啊,需要的话留个邮箱,我发程序过去。。。非常感谢!!!!!! C 编程
[解决办法]
成绩录入的p->score[i]要加&,其余的要调试看看
[解决办法]

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
//#include<conio.h>



typedef struct stu
{
char    num[10];
    char    name[16];
    float   score[4];
    float   sum;
    int     order;
    struct  stu *next;
}Student;

#define Length sizeof(Student)

int Menu_Select();
Student *Create();
void Print(Student *head);
void Search(Student *head);
void Change(Student *head);
Student *Delete(Student *head);
Student *Sort1(Student *head);
Student *Sort2(Student *head);
Student *Insert(Student *head);
void Save(Student *head);
Student *Load();
//*****主函数********//
int main()
{
Student *head;
    head=NULL;
    for(;;)
    {
switch(Menu_Select())    
        {
case 0:
head=Create();
break;

            case 1:
Print(head);
break;

            case 2:
Search(head);
break;

case 3:
Change(head);
break;

            case 4:
head = Delete(head);
break;

            case 5:
head = Insert(head);
break;

            case 6:
Save(head);
break;

            case 7:
head=Load(); 
break;

            case 8:
exit(0);
        }
    }
}
//***********主菜单*************//
int Menu_Select()
{
int n;
    printf("\t\t        欢迎来到C管理系统\n");
    printf("================================================================================\n");
    printf("\t\t\t0.学生成绩录入\n");
    printf("\t\t\t1.学生成绩浏览\n");
    printf("\t\t\t2.成绩查询\n");
printf("\t\t\t3.成绩修改\n");
    printf("\t\t\t4.删除记录\n");
    printf("\t\t\t5.成绩记录添加\n");


    printf("\t\t\t6.保存文件\n");
    printf("\t\t\t7.读取文件\n");
    printf("\t\t\t8.退出\n");
    printf("================================================================================\n");
    do
{
printf("\n请输入菜单项序号(0-8):");  
        scanf("%d",&n);
    }while(n<0
[解决办法]
n>8);

    return(n);
}
//******成绩录入**********//
Student  *Create()
{
Student  *head=NULL,*p;
char c;
system("cls");
    for(;;)
    {
printf("\n是否继续输入?(Y/N):");
scanf("%c",&c);
        if(c=='n'
[解决办法]
c=='N') break;
        if(c=='y'
[解决办法]
c=='Y')
{
p=(Student  *)malloc(Length);
            if(!p)
            {
printf("\n出错了!");
                return (head);
            }
            printf("\n请输入学号:"); 
            scanf("%s",p->num);
            printf("请输入姓名:");
            scanf("%s",p->name);
printf("平时成绩:");
            scanf("%f",&(p->score[0]));    //取地址符&
                printf("试验成绩:");
            scanf("%f", &(p->score[1]));    //取地址符&
printf("设计成绩:");
            scanf("%f", &(p->score[2]));    //取地址符&
printf("期末成绩:");
            scanf("%f", &(p->score[3]));    //取地址符&
p->sum = ( p->score[0] / 10 + p->score[1] * 3/20 
+ p->score[2] * 3/20 + p->score[3] * 3/5);
            p->order = 0;
            p->next = head;
            head = p;
}
    }
    return(head);  
}
//******成绩浏览*********//
//***按学号排序***//
Student *Sort1(Student *head)
{
int i=0;
    Student *p1,*p2,*t,*temp,*p;
    p1 = NULL;
    while(head!=NULL)
    {
for(p=head,temp=head;p->next!=NULL;p=p->next)
{
if(strcmp(p->next->num,temp->num)<0)
{
t=p;
temp=p->next;


}
}
if(p1==NULL)
{
p1=temp;
p2=temp;
}
else
{
p2->next=temp;
p2=temp;
}
if(temp == head)
{
head = head->next;
}
else
{
t->next=temp->next;
}
}
    if(p!=NULL)
    {
p2->next=NULL;
    }
    head=p1;
    while(p1!=NULL)
    {
i++;
        p1->order=i;
        p1=p1->next;
    }
    system("cls");
    return (head);
}
//*按总成绩排序*//
Student *Sort2(Student *head)
{
int i=0;
    Student *p1,*p2,*t,*temp,*p;
    p1=NULL;
    while(head!=NULL)
    {
for(p = head,temp = head; p->next != NULL; p = p->next)
{
if((p->next->sum)>(temp->sum))   
{
t=p;
temp=p->next;
}
}
if(p1==NULL)
{
p1=temp;
p2=temp;
}
else
{
p2->next=temp;
p2=temp;
}
if(temp==head)
{
head=head->next;
}
else
{
t->next=temp->next;
}
    }
    if(p!=NULL)
    {
p2->next=NULL;
    }
    head=p1;
    while(p1!=NULL)
    {
i++;
        p1->order=i;
        p1=p1->next;
    }
    system("cls");
    return (head);
}
void Print(Student  *head)
{
int i=0,t;
    Student *p;
    p=head;
    system("cls");
printf("1.按学号排序输出:\n");
printf("2.按成绩降序输出:\n");
printf("请选择成绩浏览方式:");
scanf("%d",&t);
if (t==1)
{
Student *Sort1(Student *head);
}
else if(t==2)
{
Student *Sort2(Student *head);
}
else
printf("错了!按原数据输出。/n");
    printf("\n============================学生成绩信息============================\n");
    printf("
[解决办法]
学号
[解决办法]
    姓名    
[解决办法]
 平时成绩 
[解决办法]
 试验成绩 
[解决办法]
 设计成绩 
[解决办法]
 期末成绩 
[解决办法]
 总成绩 
[解决办法]
\n");
    while(p!=NULL)
    {
i++;
        printf("


[解决办法]
 %-3s
[解决办法]
 %-8s 
[解决办法]
 %-2f 
[解决办法]
 %-2f 
[解决办法]
 %-2f 
[解决办法]
 %-2f 
[解决办法]
 %-2f 
[解决办法]
\n", 
         p->num, p->name, p->score[0], p->score[1], p->score[2], p->score[3], p->sum);    //类型注意匹配了
        p = p->next;
    }
    printf("======================================================================\n");
}

void Search(Student  *head)
{
int t;
Student *p;
    char s[16];
    system("cls");
printf("请选择查找方式:/n");
printf("1.按学号查找:/n");
printf("2.按姓名查找:/n");
printf("输入序号:");
scanf("%d",&t);
if(t==1)
{
printf("请输入要查找学生的学号:");
scanf("%s",s);
p=head;
while(strcmp(p->num,s) && p != NULL)
p=p->next;
if(p != NULL)
{
printf("\n
[解决办法]
学号
[解决办法]
    姓名    
[解决办法]
 平时成绩 
[解决办法]
 试验成绩 
[解决办法]
 设计成绩 
[解决办法]
 期末成绩 
[解决办法]
 总成绩 
[解决办法]
\n");
printf("
[解决办法]
 %-3s
[解决办法]
 %-8s 
[解决办法]
 %-2f 
[解决办法]
 %-2f 
[解决办法]
 %-2f 
[解决办法]
 %-2f 
[解决办法]
 %-2f 
[解决办法]
\n",
p->num,p->name,p->score[0],p->score[1],p->score[2],p->score[3],p->sum);
}
else
printf("无此学号的记录!");
}
else
{
printf("请输入要查找学生的姓名:");


scanf("%s",s);    //这个地方倒是多了&
while(p != NULL && strcmp(p->name,s))
p=p->next;
if(p!=NULL)
{
printf("\n
[解决办法]
学号
[解决办法]
    姓名    
[解决办法]
 平时成绩 
[解决办法]
 试验成绩 
[解决办法]
 设计成绩 
[解决办法]
 期末成绩 
[解决办法]
 总成绩 
[解决办法]
\n");
printf("
[解决办法]
 %-3s
[解决办法]
 %-8s 
[解决办法]
 %-2f 
[解决办法]
 %-2f 
[解决办法]
 %-2f 
[解决办法]
 %-2f 
[解决办法]
 %-2f 
[解决办法]
\n",
p->num,p->name,p->score[0],p->score[1],p->score[2],p->score[3],p->sum);
}
else
printf("无此学生的记录!");
}
}
void Change(Student  *head)
{
Student  *p;
char c,s[16];
system("cls");
printf("请输入你要修改的学生学号或姓名:");
scanf("%s",s);
p = head;
while(p != NULL && ((strcmp(p->num,s)) 
[解决办法]
 (strcmp(p->name,s))) )
p = p->next;
if(p != NULL)
    {
printf("\n
[解决办法]
学号
[解决办法]
    姓名    
[解决办法]
 平时成绩 
[解决办法]
 试验成绩 
[解决办法]
 设计成绩 
[解决办法]
 期末成绩 
[解决办法]
 总成绩 
[解决办法]
\n");
        printf("
[解决办法]
 %-3s
[解决办法]
 %-8s 


[解决办法]
 %-2f 
[解决办法]
 %-2f 
[解决办法]
 %-2f 
[解决办法]
 %-2f 
[解决办法]
 %-2f 
[解决办法]
\n",
p->num,p->name,p->score[0],p->score[1],p->score[2],p->score[3],p->sum);
printf("\n确定要对这个数据进行修改吗?(Y/N):");
        for(;;)
        {
scanf("%*c%c",&c);    //%*c用于接收缓冲区里的垃圾'\n'
            if(c=='n'
[解决办法]
c=='N') 
break;
            if(c == 'y'
[解决办法]
c == 'Y')
            {
printf("\n请输入学号:"); 
                scanf("%s",p->num);
                printf("请输入姓名:");
                scanf("%s",p->name);
printf("平时成绩:");
                scanf("%f", &(p->score[0]));
                printf("试验成绩:");
                scanf("%f", &(p->score[1]));
printf("设计成绩:");
                scanf("%f", &(p->score[2]));
printf("期末成绩:");
                scanf("%f", &(p->score[3]));
p->sum = (p->score[0]/10 + p->score[1] * 3/20
+ p->score[2] * 3/20 + p->score[3] * 3/5);
                printf("此学生数据已被修改了,别忘记保存哦.\n");
break;
            }
        }
    }
else
printf("无此学生的记录!");
}

Student *Delete(Student *head)
{
    Student *p1,*p2;
    char c,s[16];
    system("cls");
    printf("请输入要删除的学生学号或姓名:");
    scanf("%s",s);
    p1=p2=head;
    while( p1 != NULL && ((strcmp(p1->num,s) 
[解决办法]
 strcmp(p1->name,s))) )
    {
p2=p1;
        p1=p1->next;
    }
    if((strcmp(p1->num,s))


[解决办法]
(strcmp(p1->name,s))==0)
    {
printf("\n
[解决办法]
学号
[解决办法]
    姓名    
[解决办法]
 平时成绩 
[解决办法]
 试验成绩 
[解决办法]
 设计成绩 
[解决办法]
 期末成绩 
[解决办法]
 总成绩 
[解决办法]
\n");
        printf("
[解决办法]
 %-3s
[解决办法]
 %-8s 
[解决办法]
 %-2f 
[解决办法]
 %-2f 
[解决办法]
 %-2f 
[解决办法]
 %-2f 
[解决办法]
 %-2f 
[解决办法]
\n",
        p1->num,p1->name,p1->score[0],p1->score[1],p1->score[2],p1->score[3],p1->sum);
        printf("\n确定要删除这个数据吗?(Y/N):");
        for(;;)
        {
scanf("%*c%c",&c);    //%*c用于接收缓冲区里的垃圾'\n'
            if(c=='n'
[解决办法]
c=='N') 
break;
            if(c=='y'
[解决办法]
c=='Y')
            {
if(p1==head)
                head=p1->next;
                else
                    p2->next=p1->next;
                printf("此学生的数据已被删除了,别忘记保存哦.\n");
break;
            }
        }
     }
    else
        printf("无此学生的记录\n");
    return(head);
}

Student *Insert(Student *head)
{
Student *p,*NEW;
    NEW=(Student *)malloc(Length);


    if(!NEW)
    {
printf("\n出错了!");
        return (head);
    }
    system("cls");
    printf("请输入新数据!\n");
    printf("\n请输入学号:");
    scanf("%s",NEW->num);
    printf("请输入姓名:");
    scanf("%s",NEW->name);
    printf("请输入平时成绩:");
    scanf("%f",&(NEW->score[0]));
    printf("请输入实验成绩:");
    scanf("%f",&(NEW->score[1]));
    printf("请输入设计成绩:");
    scanf("%f",&(NEW->score[2])); 
printf("请输入期末成绩:");
    scanf("%f",&(NEW->score[3]));
    NEW->order=0;
    if(head==NULL)
    {
head = NEW;
NEW->next = NULL;
}
    else
    {
p = head->next;
        head->next = NEW;
        NEW->next = p;
    }
    printf("此学生的数据已被添加,别忘记保存哦.\n");    
    return(head);
}
void Save(Student *head)
{
FILE *fp;
    Student *p;
    char outfile[10];
    system("cls");
    printf("请输入输出文件名,例如c:\\test\n");
    scanf("%s",outfile);
    if((fp=fopen(outfile,"wb"))==NULL)
    {
printf("不能打开此文件!\n");
        return;
    }
    p = head;
    while(p!=NULL)
    {
fwrite(p,Length,1,fp);
        p=p->next;
    }
    fclose(fp);
    printf("保存文件成功!\n");
}
Student *Load()
{
Student *p1,*p2,*head=NULL;
    FILE *fp;
    char infile[10];
    system("cls");
    printf("请输入读取文件名,例如c:\\test\n");
    scanf("%s",infile);
    if((fp = fopen(infile,"rb"))==NULL)
    {
printf("不能打开此文件!\n");
        return(head);
    }
    p1=(Student *)malloc(Length);
    if(!p1)
    {
printf("出错了!\n");
        return(head);
    }
    head = p1;
    while(!feof(fp))
    {
if(fread(p1,Length,1,fp)!=1) break;
        p1->next=(Student *)malloc(Length);
        if(!p1->next)
        {
printf("出错了!\n");
            return (head);
        }
        p2=p1;
        p1=p1->next;
    }
    p2->next=NULL;


    fclose(fp);
    printf("读取文件成功!\n");
    return (head);
}


热点排行