2 qq 29365517 qq_29365517 于 2017.01.14 09:43 提问

尝试编了学生工作管理系统程序,可是不知道哪儿错了!请不吝赐教!!

输入学生信息后,输出时的都是同一个数据,乱码。
程序分三个段
第一个输入函数
第二个输出函数
第三个调用主函数
程序段如下,请不吝赐教,谢谢!
#include
#include
#include
#include
void stuinfoinput()
{
FILE fp;
struct stu
{
int num;
char name[10];
char add[15];
int score;
}stu1;
if((fp=fopen("c:\my program\my downlod\student info.txt","wt+"))==NULL)
{
printf("can not open this file!\n");
exit(1);
}
printf("please input student number:\n0 is exit\n==========================================\n");
scanf("%d",&stu1.num);
while(stu1.num!=0)
{
printf("please input student's name,add,score\n");
scanf("%s,%s,%d",stu1.name,stu1.add,&stu1.score);
fseek(fp,sizeof(struct stu)
(stu1.num-1),0);
fwrite(&stu1,sizeof(struct stu),1,fp);
printf("please input student's number:\n");
scanf("%d",&stu1.num);
}
fclose(fp);
}
void stuinfooutput()
{
FILE *fp;
struct stu
{
int num;
char name[10];
char add[15];
int score;
}stu1;
if((fp=fopen("c:\my program\my downlod\student info.txt","wt+"))==NULL)
{
printf("can not open this file!\n");
exit(1);
}
printf("input student number:\n");
scanf("%d",&stu1.num);
fseek(fp,sizeof(struct stu) * (stu1.num-1),0);
fread(&stu1,sizeof(struct stu),1,fp);
printf("number: name: add: score:\n");
printf("%5d %s %s %5d\n",stu1.num,stu1.name,stu1.add,stu1.score);
fclose(fp);
}
int main()
{
int i;
printf("please input what you want:\n1 is input student info,\n2 is output student info\n0 is exit\n");
printf("====================================================\n");
scanf("%d",&i);
for(;i!=0;)
{
if(i==1)
{
stuinfoinput();
}
if(i==2)
{
stuinfooutput();
}
if(i==0)
{
exit(0);
}
printf("please input what you want:\n1 is input student info,\n2 is output student info\n0 is exit\n");
scanf("%d",&i);
}
return 0;
}

2个回答

u011261430
u011261430   2017.01.20 14:53
已采纳

写了一个很粗糙的,不知道是什么需求

// Test_two.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include
#include
#include
using namespace std;
#include

typedef char i8;
typedef unsigned char u8;
typedef short i16;
typedef unsigned short u16;
typedef long int i32;
typedef unsigned long u32;

typedef struct STU_INFO
{
char name[10];
char add[15];
int score;
}STU_INFO,*PSTU_INFO;

std::map g_mapStu;

void WriteStudentInfo(const int nStuNum, STU_INFO &sStu_Inof);//声明

//初始化加载未处理订单
void LoadOrderMap()
{
g_mapStu.clear();
map::iterator it;

FILE* pfile = NULL;
string strDir = "C:\\Users\\Administrator\\Desktop\\新建文件夹\\student info.txt";
if( 0 == fopen_s(&pfile,strDir.c_str(),"r+"))
{
    fseek(pfile,0,SEEK_END);
    u32 dwsize = ftell(pfile);
    rewind(pfile);

    char* filebuffer = new char[dwsize];
    size_t nsize = fread(filebuffer, 1, dwsize, pfile);
    if (nsize != dwsize)
    {
        fclose(pfile);
        fopen_s(&pfile,strDir.c_str(),"r+");
        dwsize = nsize;
        delete []filebuffer;
        filebuffer = new char[dwsize];
        fread(filebuffer, 1, dwsize, pfile);
    }

    char *szsepLine = "\n";
    char *szsepRow = ",";
    char* sznexttokenLine = NULL;
    char* sznexttokenRow = NULL;
    STU_INFO sStuInfo;//学生信息
    int nStuNum = 0;

    char* szLine = strtok_s(filebuffer,szsepLine,&sznexttokenLine);

    while(NULL != szLine)//取一行
    {
        char* szRow = strtok_s(szLine,szsepRow,&sznexttokenRow);
        int i = 1;
        while(NULL != szRow)//nStuNum,name,add,score\n    //取一个数据
        {
            if (1 == i)
            {
                nStuNum = atoi(szRow);
            }
            else if (2 == i)
            {
                strcpy_s(sStuInfo.name, szRow);
            }
            else if (3 == i)
            {
                strcpy_s(sStuInfo.add, szRow);
            }
            else if (4 == i)
            {
                sStuInfo.score = atoi(szRow);
            }


            i++;
            szRow = strtok_s(NULL,szsepRow,&sznexttokenRow);
        }

        it = g_mapStu.find(nStuNum);
        if (it == g_mapStu.end())
        {
            g_mapStu.insert(pair<int ,STU_INFO>(nStuNum, sStuInfo));
        }
        else
        {
            g_mapStu.erase(it);
            g_mapStu.insert(pair<int ,STU_INFO>(nStuNum, sStuInfo));
        }

        szLine = strtok_s(NULL,szsepLine,&sznexttokenLine);
    }

    fclose(pfile);

    delete []filebuffer;
}

//删除错误数据
for (it=g_mapStu.begin(); it!=g_mapStu.end();)
{
    if (0 == it->first)
    {
        g_mapStu.erase(it++);
    }
    else
    {
        it++;
    }
}

//二次写入
for (it=g_mapStu.begin(); it!=g_mapStu.end(); it++)
{
    WriteStudentInfo(it->first, it->second);
}

}

//学生信息写入
void WriteStudentInfo(const int nStuNum, STU_INFO &sStu_Inof)
{

char chOrderBuf[1024] = "";//nStuNum,name,add,score\n
sprintf_s(chOrderBuf, "%d,%s,%s,%d\n", nStuNum, sStu_Inof.name, sStu_Inof.add, sStu_Inof.score);

string strDir = "C:\\Users\\Administrator\\Desktop\\新建文件夹\\student info.txt";
FILE* pfile = NULL;
if( 0 == fopen_s(&pfile,strDir.c_str(),"a+"))
{
    fwrite(chOrderBuf,1,strlen(chOrderBuf),pfile);
    fclose(pfile);
}
else
{
    cout<<"open OrderLogDir error"<<endl;
}

}

//显示学生信息
void ShowStudentInfo(const int nStuNum=0)
{
map::iterator it;

if (0 == nStuNum)//显示全部
{
    if (!g_mapStu.empty())
    {
        printf("***********student info***********\n");
        for (it=g_mapStu.begin(); it!=g_mapStu.end(); it++)
        {

            printf("Num:%d\n", it->first);
            printf("name:%s\n", it->second.name);
            printf("add:%s\n", it->second.add);
            printf("score:%d\n", it->second.score);
        }
        printf("*********************************\n");
    }
    else
    {
        printf("***********student info is empty***********\n");
    }
}
else
{
    //查找某个学生
    it = g_mapStu.find(nStuNum);
    printf("*********************************\n");
    if (it!=g_mapStu.end())
    {
        //找到显示
        printf("Num:%d\n", it->first);
        printf("name:%s\n", it->second.name);
        printf("add:%s\n", it->second.add);
        printf("score:%d\n", it->second.score);
    }
    else
    {
        //未找到
        printf("**************Student is non existence**************\n");
    }
    printf("*********************************\n");
}

}

//插入学生信息
void InsertStudent(const int nStuNum, STU_INFO &sStu_Inof)
{
map::iterator it;
it = g_mapStu.find(nStuNum);
if (it!=g_mapStu.end())
{
//找到修改(可以考虑提示用户后再修改)
strcpy_s(it->second.name, sStu_Inof.name);
strcpy_s(it->second.add, sStu_Inof.add);
it->second.score = sStu_Inof.score;
}
else
{
//未找到插入
g_mapStu.insert(pair(nStuNum, sStu_Inof));
}

//直接写入文件保存
WriteStudentInfo(nStuNum, sStu_Inof);

}

int _tmain(int argc, _TCHAR* argv[])
{
LoadOrderMap();//初始化加载学生信息

int nCmd = 0;//命令参数

int nStuNum = 0;
while(true)
{
    printf("please input what you want:\n1 is Insert student info,\n2 is Show student info\n0 is exit\n");
    printf("CMD:");
    scanf_s("%d", &nCmd);

    nStuNum = 0;
    if(1 == nCmd)
    {
        //stuinfoinput();
        STU_INFO sStu_info={0};

        printf("please input student's Num:");
        scanf_s("%d", &nStuNum);
        printf("please input student's name:");
        scanf_s("%s", sStu_info.name, sizeof(sStu_info.name));
        printf("please input student's add:");
        scanf_s("%s", sStu_info.add, sizeof(sStu_info.add));
        printf("please input student's score:");
        scanf_s("%d", &sStu_info.score);

        InsertStudent(nStuNum, sStu_info);
        printf("Insert student OK\n");
    }
    else if(2 == nCmd)
    {
        //stuinfooutput();
        printf("please input student's Num(input 0 to show all student):");
        scanf_s("%d", &nStuNum);
        ShowStudentInfo(nStuNum);
    }
    else if(0 == nCmd)
    {
        break;
    }
    //一般功能增、删、改、查

}

system("pause");
return 0;

}


u011261430
u011261430 回复qq_29365517: 额,是C++,你可以稍加修改成C的
一年多之前 回复
qq_29365517
qq_29365517 谢谢!就是为了写入然后读出,请问这是用C++写的吗?
一年多之前 回复
u011261430
u011261430   2017.01.14 11:46

大概看了看,发现写入有问题
1、“fwrite(&stu1,sizeof(struct stu),1,fp);”
ize_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
注意:这个函数以二进制形式对文件进行操作,不局限于文本文件
返回值:返回实际写入的数据块数目
(1)buffer:是一个指针,对fwrite来说,是要获取数据的地址;
(2)size:要写入内容的单字节数;
(3)count:要进行写入size字节的数据项的个数;
(4)stream:目标文件指针;
(5)返回实际写入的数据项个数count。
应该是“fwrite(&stu1,1,sizeof(struct stu),fp);
这样写入是可以的
2、FILE fp;应该是FILE *fp;可能是复制掉了吧
3、文件路径反斜杠应该是两个吧

u011261430
u011261430 回复qq_29365517: 你这个是要干嘛的?存信息到文件,然后读取?
一年多之前 回复
qq_29365517
qq_29365517 关于fwrite()百度百科下就有例子是我的那个结构的
一年多之前 回复
qq_29365517
qq_29365517 FILE*fp 和反斜杠错误都是复制上来时候自动转换没了的,我的程序里是有的。
一年多之前 回复
qq_29365517
qq_29365517 谢谢回复!但是fwrite里size是指要写入的结构大小,count是计数的意思,也就是几个结构,所以语法是"fwrite(&stu1,sizeof(struct stu),1,fp) 我尝试了你的写法,结果也是输出同一个乱码,
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
学生成绩管理系统 三成架构
学生成绩管理系统 表元编辑、按科目输入和按成员输入 自动计算 自动排序 表线类型、表线颜色
酒店管理系统程序
由学生系统改编成酒店管理系统 #include"stdio.h" #include"stdlib.h" #include"string.h" #include"conio.h" #define PAGE 3 #define MAX 1000 #define N 5 int k=0;   /*结构体类型*/ typedef struct   {   int num;/*
学生成绩管理系统C语言程序代码
一份学生成绩管理系统C语言程序代码, 大一入学做的, 希望能帮到你们
学生考勤管理系统(毕业设计)
学生考勤管理系统,是毕业设计时的论文。讲述了学生考勤管理系统中的相应内容。以及毕业设计的格式等
Java入门-学生成绩管理系统(五)
Java入门-学生成绩管理系统(五)model包下的四个操作类:增删改查1、AddOperation/*/AddOperation*/ package model; import control.Administrator; import control.FileControler; /*/新增操作,添加新建学生信息*/ public class AddOperation { publ...
ccna 第二学期 finalexam v4.0
刚刚做的,93.3,不知道哪儿错了…,参考一下吧,第一套卷子没截下图,四个pdf…
一个简易学生成绩管理系统的vb 程序设计报告
一个简易的学生成绩管理系统的课程设计报告!
JAVA小程序---学生管理系统
在控制台输入输出的学生管理系统,可以添加,查询,修改,打印学生。import java.util.Scanner; public class StudentManagerSystem{ /** 局部变量:方法里的变量,作用域在该方法内 全局变量:类里,方法外,作用域所有方法都共享 */ public static void main(String[] args){ ...
c/c++课程设计学生成绩管理系统
关于c语言和c++的课程成绩信息管理系统,共有将近6000行代码,建议使用vs2012或2010便于管理也可使用VC6.0++环境修改运行但查找麻烦,所有的语言没有脱离c和c++,主要采用模块思想,也可以转换成面向对象型的语言,只要将模块函数写进类中。同时学c语言的也可以使用,除了使用cout,cin一些很容易上手的c++代码,相当于printf,scanf,主要为了方便输入输出,不用写%d%c... 详细细节也可以访问,百度文库网址 使用注意事项 有着强大的报错功能。 1 全部采用鼠标点击功能,可以看百度网址图片。 2 录用学生信息的细节选项中,如果点击错误信息,再次点击将会取消。 3 附加功能中的高级打印功能中,如果想改变选项,只需要点击另一个即可,当前的状态就会消失。 4 输入学号为53120101--531215**(其中不包括****00,例如53120700)。(可以设置) 5 所有成绩范围为0--99。(可以设置) 6 如果想去掉钢琴曲,直接删除MP3,或者改成其他名字即可。 7 打印直方图可以根据班级的不同,向后移动。 7 如果打印不规范,可能窗口较小,可通过调节窗口大小来打印排名...... 8 请包含student.txt默认文件(文件中至少一名学生信息),否则将会程序在进行实质功能作用时意外退出(已在包中)。 头文件student.h #ifndef _STUDENT_H_ #define _STUDENT_H_ #include<string.h> #include<windows.h> HWND hWnd; //来自msdn #define PERR(bSuccess, api){if(!(bSuccess)) printf("%s:Error %d from %s \ on line %d\n", __FILE__, GetLastError(), api, __LINE__);} void cls( HANDLE hConsole ) { COORD coordScreen = { 0, 0 }; /* here's where we'll home thecursor */ BOOL bSuccess; DWORD cCharsWritten; CONSOLE_SCREEN_BUFFER_INFO csbi; /* to get buffer info */ DWORD dwConSize; /* number of character cells inthe current buffer *//* get the number of character cells in the current buffer */ bSuccess = GetConsoleScreenBufferInfo( hConsole, &csbi ); PERR( bSuccess, "GetConsoleScreenBufferInfo" ); dwConSize = csbi.dwSize.X * csbi.dwSize.Y;/* fill the entire screen with blanks */ bSuccess = FillConsoleOutputCharacter( hConsole, (TCHAR) ' ', dwConSize, coordScreen, &cCharsWritten ); PERR( bSuccess, "FillConsoleOutputCharacter" );/* get the current text attribute */ bSuccess = GetConsoleScreenBufferInfo( hConsole, &csbi ); PERR( bSuccess, "ConsoleScreenBufferInfo" );/* now set the buffer's attributes accordingly */ bSuccess = FillConsoleOutputAttribute( hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten ); PERR( bSuccess, "FillConsoleOutputAttribute" );/* put the cursor at (0, 0) */ bSuccess = SetConsoleCursorPosition( hConsole, coordScreen ); PERR( bSuccess, "SetConsoleCursorPosition" ); return; } HANDLE hOut; HANDLE hIn; void enter(); void ReadFile(char*str="student.txt"); typedef enum grade{you=95,liang=85,zhong=75,pass=65,nopass=0 } Grade; Grade g1=you; Grade g2=liang; Grade g3=zhong; Grade g4=pass; Grade g5=nopass; void DelClass(); //学生类结构 typedef struct student{ int studentid; char name[20]; char sex[5]; char nation[20]; int biryear; int birmonth; char post[10]; int cyu; int cyushe; int cshe; int cdui; int cduishe; struct student* next; double ave; double wave; } Student; Student *stubegin=NULL; Student* stulast=NULL; int total=0; //课程类结构 typedef struct course{ char obj[30]; int time; int xuefen; int mark; Grade rank; } Course; Course c1; Course c2; Course c3; Course c4; Course c5; void InitCourse(); void AddData(Student*); void AltData(); void AddShuju(int *,Student*); void IntEro(int& ,int,int,int,int); //功能介绍 /*****************************************Loading页面*******************************************/ void input();//输入信息功能 void output();//输出信息功能 void addition();//附加功能 /*****************************************输入信息功能*******************************************/ void AddStudent(); void DelStudent(int); void AltStudent(int); void SaveMessage(); void readfile(); /*****************************************输出信息功能*******************************************/ void CalRankAve(int); void CalRankWave(int); void PrintStudent(int); void PrintCourse(int); void PrintWell(); /*****************************************打印总成绩*******************************************/ void PrintTotal(); void PrintStudentID(); void PrintAve(); void PrintWave(); /*****************************************打印科目成绩*******************************************/ void PrintObj(); void PrintCyu(); void PrintCyushe(); void PrintCshe(); void PrintCdui(); void PrintCuishe(); /*****************************************打印优秀职务单科成绩*******************************************/ void PrintObjYou(); void PrintCyuYou(); void PrintCyusheYou(); void PrintCsheYou(); void PrintCduiYou(); void PrintCuisheYou(); /*********************辅助函数**********************/ void printmark(Student *); void AddStudent1(); void SortAve(); void SortWave(); void SortId(); void SortCyu(); void SortCyushe(); void SortCshe(); void SortCdui(); void SortCduishe(); int GetInt(char* ); int Search(int); void PrintGrade(int); int GetXuefen(int,int); /****计算平均成绩和加权成绩**/ void CalAve(Student*); void CalWave(Student*); /*****************************************附加功能*******************************************/ void PrintHistogram(); void PrintTotalHistogram();
学生信息管理系统调试
调试1:VB程序无法修改数据库 1·关于在学生信息管理系统中添加用户信息,用户信息添加成功数据却无法同步到数据库的问题: 在模块代码中,打开数据库时采用了可写的方式以及有权限写入数据库. 错误语句rst.Open Trim$(SQL),cnn, adOpenKeyset, adLockBatchOptimistic 正确语句rst.Open Trim$(SQL),cnn, adOpe