鱼C论坛

 找回密码
 立即注册
查看: 2626|回复: 4

课程设计 修改错误。。。求大侠

[复制链接]
发表于 2012-2-18 15:17:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
// class.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
char ch,filename[20];

struct cla
{
int studentID;
char studentName[10];
char studentGender[4];
}Class[70];
void Includefunction() //增加
{
FILE *fp1;
char ch;
int flag, index = 0;



fp1=fopen(filename,"at+");
printf("\n");

printf("请按照学号、姓名、性别的顺序格式输入学生信息,且在完成时请按ctrl+x结束\n");
while(true)
{
  printf("请输入第%d个学生的信息:", ++ index);
  flag = scanf("%d %s %s",&Class[70].studentID,&Class[70].studentName,&Class[70].studentGender);
  if (!flag)
  {
   break;
  }
  fprintf(fp1,"%d %s %s\n",Class[70].studentID,Class[70].studentName,Class[70].studentGender);  
  
}
fclose(fp1);
printf("你本次输入了%d个学生的信息,全部学生信息如下:\n", index);
fp1=fopen(filename,"at+");
while (fscanf(fp1,"%d %s %s",&Class[70].studentID,&Class[70].studentName,&Class[70].studentGender)!=EOF)
{
  printf("%d %s %s\n",Class[70].studentID,Class[70].studentName,Class[70].studentGender);        
  
}
fclose(fp1);
}


void Deletefunction()    //删除
{
int r,s,y;
FILE *fp1;
fp1=fopen(filename,"at+");
printf("请选择学生信息来进行查找再进行删除:\n1、学号\n2、姓名\n");
scanf("%d",&r);     
switch(r)
{
case 1:
  printf("请输入你所要查找的学号\n");
  scanf("%d",&Class[70].studentID);
  for(s=0;s<70;s++)
  {
   if(Class[70].studentID!=Class[s].studentID)
    printf("信息不存在\n");
  }
  
  break;
case 2:
  printf("请输入你所要查找的姓名\n");
  scanf("%s",&Class[70].studentName);
  for(s=0;s<70;s++)
  {
   if(Class[70].studentName!=Class[s].studentName)
   {
    printf("信息不存在\n");
   }
  }
  break;
}

printf("是否删除?1、yes or 2、no\n");
scanf("%d",&y);
switch(y)
{
case 1:
  if(Class[s+1].studentName==NULL)
  {
   Class[s].studentName==NULL;
   Class[s].studentID==NULL;
   Class[s].studentGender==NULL;
  }
  for(;s<70;s++)
  {
   Class[s].studentID=Class[s+1].studentID;
   Class[s].studentName=Class[s+1].studentName;
   Class[s].studentGender=Class[s+1].studentGender.;//删除中。。。
  }
  
  printf("删除成功!\n");
  fclose(fp1);
  break;
case 2:
  break;
  
}
}
void Modifyfunction() //修改
{
int o,z;
FILE *fp1;
fp1=fopen(filename,"at+");
printf("请选择要修改的学生信息来进行查找再进行修改:\n1、学号\n2、姓名\n");
scanf("%d",&o);      //查找中。。。
switch(o)
{
case 1:
  printf("请输入你所要查找的学号\n");
  scanf("%d",&Class[70].studentID);
  for(s=0;s<70;s++)
  {
   if(Class[70].studentID!=Class[s].studentID)
    printf("信息不存在\n");
  }
  printf("是否修改?1、yes or 2、no\n");
  scanf("%d",&z);
  switch(z)
  {
  case 1:
   printf("请输入要修改的学生信息\n");
   scanf("%d",&ch);
            Class[70].studentID=ch;
   printf("修改成功!\n");
   break;
  case 2:
   break;
  }
  
  
  break;
  case 2:
   printf("请输入你所要查找的姓名\n");
   scanf("%s",&Class[70].studentName);
   for(s=0;s<70;s++)
   {
    if(Class[70].studentName!=Class[s].studentName)
     printf("信息不存在\n");
   }
   printf("是否修改?1、yes or 2、no\n");
   scanf("%d",&z);
   switch(z)
   {
   case 1:
    printf("请输入要修改的学生信息\n");
    scanf("%d",&ch);
    Class[70].studentName=ch;
    printf("修改成功!\n");
    break;
   case 2:
    break;
   }
   break;
}
fclose(fp1);


}




int main(int argc, char* argv[])
{
FILE *fp1,*fp2;
int a,b,c;




while((a!='1')&&(a!='2')&&(a!='3'))  //循环选择系    统
{
  
  printf("请选择:\n1、打开一个班级花名册\n2、新建一个班级花名册\n3、退出系统\n");
  
  scanf("%d",&a);
  
  switch(a)
  {
  case 1:  
   int i;
   FILE *fp1;
   
   printf("请输入文件名\n");     //用filename代替选择文件名,先输入文件名称,再选择输入
   scanf("%s",filename);
   fp1=fopen(filename,"at+");
   ch=fgetc(fp1);
   if(fp1=fopen(filename,"at+")==NULL)
   {
    printf("无法打开文件。\n");
    exit(0);
   }
   while(ch!=EOF)
   {
    putchar(ch);
    ch=fgetc(fp1); //文件数据显示在屏幕上
   }
   printf("\n");
   
   
   
   if(i!=5)     //如果不是选择5的话就循环
   {
    printf("请选择:\n1、增加学生信息\n2、删除学生信息\n3、修改学生信息\n4、查看\n");
    scanf("%d",&i);
    switch(i)
    {
    case 1:
     Includefunction();//增加
     break;
    case 2:
     Deletefunction(); //删除
     break;
    case 3:
     Modifyfunction(); //修改
     break;
    case 4:
     break;
     
     
    }
   }
   break;
   
   
   
  case 2:
   int b;
   printf("请为文件命名\n");
   scanf("%s",filename);
   fp2=fopen(filename,"wt+");
   
   if(!(fp2=fopen(filename,"wt+")))
   {
    printf("命名错误\n");
    exit(0);
   }
   
   printf("请按照学号、姓名、性别的格式输入学生信息\n");
            for(;;)//到达某一项数值就停止。。。
   {
    scanf("%d %s %s",&Class[70].studentID,&Class[70].studentName,&Class[70].studentGender);
    fprintf(fp2,"%d %s %s\n",Class[70].studentID,Class[70].studentName,Class[70].studentGender);
   }
   fclose(fp2);
   printf("你本次输入的学生信息有以下:\n");
   fp2=fopen(filename,"at+");
   while (fscanf(fp2,"%d %s %s",&Class[70].studentID,&Class[70].studentName,&Class[70].studentGender)!=EOF)
   {
    printf("%d %s %s\n",Class[70].studentID,Class[70].studentName,Class[70].studentGender);        
   
   }
   fclose(fp2);
   
   break;
   
  case 3:
   printf("3、退出系统\n");
   break;
   
  default:
   printf("错误!请重新输入!\n");
   exit(0);
   
  }
  
}


}

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-2-18 16:41:04 | 显示全部楼层
你设计的有问题
主参数应该给用户输入1-3来确认增加删除修改功能
增加删除修改你都封装成单独的一个函数
根据用户输入调用3个函数
所以main函数里代码别超过10行
main里定义个文件指针
每次传给三个函数 确保程序就定义一个文件指针
最后程序结束时释放指针
你这样设计试试

指定文件位置读写都会了的话很好写的
记得用二进制块读写就是fread fwrite
没人用什么fscanf fprintf这种读写函数的
写完后记得ffulsh(pf)
看下C现代方法这本书吧
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-2-19 10:29:50 | 显示全部楼层

谢谢你啦。。。非常感谢
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-2-19 10:31:55 | 显示全部楼层
一看你的代码.我就没兴趣继续往下看了...您是否可以告诉我 你要实现的功能.俺帮您实现一个?
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-2-21 15:50:41 | 显示全部楼层
≠_Lost 发表于 2012-2-19 10:31
一看你的代码.我就没兴趣继续往下看了...您是否可以告诉我 你要实现的功能.俺帮您实现一个?

不用了。。。谢谢
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-19 03:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表