JBTALKS.CC

标题: help~c programming assignment [打印本页]

作者: yangzz    时间: 2009-9-10 02:03 PM
标题: help~c programming assignment
Question 2:  Merging and listing selected records using files.

The employee salary details of the two branches (Branch-A and Brach-B) of XYZ company are kept in two separate files (Salary_A.txt  and Salary_B.txt)  with each line representing information about one employee. The Human Resource Department wants to have only one list showing salary information about all the Branch-A and Brach-B employees together. Therefore the two text files must be combined/merged into a single text file (Salary_AB.txt) which has the Name filed in alphabetical order.

Write a C program to merge the two files to produce a combined file. After creating the combined file the program must be capable of listing the salary details of all the clerks, engineers, or managers (depending on the user selection) with the Name field in alphabetical order and the total salary printed at the end. The program should display the following menu to the user for them to select one of the four options listed.



Sample Menu:
                -------------------------
                  SALARY MENU
                        ------------------------
1.   TO LIST CLERKS
2.        TO LIST ENGINEERS
3.        TO LIST MANAGERS
4.        TO EXIT
---------------------------
                Please enter your option <1/2/3/4>:


Sample data Salary_A.txt  file (sorted on Name field):

Name        ID No.        Designation        Branch        Salary(RM)
Abraham        1001        Manger        A        3000
Clinton        1003        Clerk        A        2000
Ibrahim        1005        Engineer        A        4000
King        1007        Engineer        A        4000

Sample data for Salary_B.txt file (sorted on Name field):

Name        ID No.        Designation        Branch        Salary(RM)
Jasmine         1002        Manger        B        3000
Kim        1004        Clerk        B        2000
Noor        1006        Engineer        B        4000

friday before 4pm need submit, help~

[ 本帖最后由 yangzz 于 2009-9-10 02:16 PM 编辑 ]
作者: Super-Tomato    时间: 2009-9-10 04:32 PM
原帖由 yangzz 于 2009-9-10 02:03 PM 发表
Question 2:  Merging and listing selected records using files.

The employee salary details of the two branches (Branch-A and Brach-B) of XYZ company are kept in two separate files (Salary_A.tx ...


1. 請先自己動手做, 遇到任何不解問題才放上來
2. 不要等到要交的前一天才來等別人幫你擦屁股
3. 中文論壇請盡量把你的題目中文化
作者: yangzz    时间: 2009-9-10 10:05 PM
标题: 回复 #2 Super-Tomato 的帖子
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int main()
{int*a,*b,*ahead,*bhead,temp,*Salary;
FILE*fp1;
char name[10],post[25];int id,branch,salary,op=1;
fp1=fopen("salary_A.txt","w");
while(op==1)
{
printf("enter name, id, post, branch and salary:");
scanf("%s%d%s%d%d",&name,&id,&post,&branch,&salary);
fprintf(fp1,"%s\t%d\t%s\t\t%d\t%d\n",name,id,post,branch,salary);
printf("Enter 1 to continue:");
scanf("%d",&op);
}
fclose(fp1);

FILE*fp2;
fp2=fopen("salary_B.txt","w");
while(op==1)
{
printf("enter name, id, post, branch and salary:");
scanf("%s%d%s%d%d",&name,&id,&post,&branch,&salary);
fprintf(fp2,"%s\t%d\t%s\t\t%d\t%d\n",name,id,post,branch,salary);
printf("Enter 1 to continue:");
scanf("%d",&op);
}
fclose(fp2);

FILE*fp3;
int option;
fp2=fopen("salary_B.txt","r");
fp1=fopen("salary_A.txt","r");
fp3=fopen("salary_AB.txt","w+");
if(fp1==NULL||fp2==NULL){
        printf("error in opening file\n");
        return 1;
}
ahead=bhead=NULL;
while(!feof(fp1))
{
        temp=(Salary*)malloc(sizeof(Salary));
        fscanf(fp1,"%s%d%s%s%s\n",temp->name,temp->id,temp->post,temp->branch,temp->sal);
        temp->next=NULL;
        if(ahead==NULL)
        {
        *a=temp;
        *ahead=*a;
        }
        else
        {
        a->next=temp;
        *a=temp;
        }
        while(!feof(fp2))
        {
        temp=(Salary*)malloc(sizeof(Salary));
        fscanf(fp2,"%s%d%s%s%s\n",temp->name,temp->id,temp->post,temp->branch,temp->sal);
        temp->next=NUll;
        if(bhead==NULL)
        {
        *b->next=temp;
        *bhead=*b;
        }
        }
        *a=*ahead;
        *b=*bhead;
        while(a!=NULL||b!=NULL)
        {
        if(a!=NULL)
        {
        fprintf(fp3,"%s\t%d%s%s%s\n",a->name,a->id,a->post,a->branch,a->sal);
        a=a->next;
        }
        else if(b!=NULL)
        {
        fprintf(fp3,"%s\t%d%s%s%s\n",b->name,b->id,b->post,b->branch,b->sal);
        b=b->next;
        }
        }


int option=1; while (option!=5)
        {
        printf("-----------\n");
        printf("SALARY MENU\n");
        printf("-----------\n");
        printf("1. TO LIST CLERK\n");
        printf("2. TO LIST ENGINEERS\n");
        printf("3. TO LIST MANAGERS\n");
        printf("4. TO EXIT\n");
        printf("-----------\n");
        printf("PLEASE ENTER YOUR OPTION <1/2/3/4>");
        scanf("%d",&option);
        a=ahead;
        b=bhead;
        fseek(fp3,0,SEEK_SET);
        switch(option){
        case 1:
        &salary);
        while(!feof(fp3)){
        fscanF(fp3,"%s%s%s%s%s",a->name,a->id,a->post,a->branch,a->sal);
        if(strcmp(a->des,"Clerk")==0)
        printf("%10s%10d%10s%10s%10f\n",a->name,a->id,a->post,a->branch,a->sal);
        }
        break;
        case 2:
        while(!feof(fp3)){
        fscanF(fp3,"%s%s%s%s%s",a->name,a->id,a->post,a->branch,a->sal);
        if(strcmp(a->post,"Engineer")==0)
        printf("%10s%10d%10s%10s%10f\n",a->name,a->id,a->post,a->branch,a->sal);
        }
        break;
        case 3:
        while(!feof(fp3)){
        fscanF(fp3,"%s%s%s%s%s",a->name,a->id,a->post,a->branch,a->sal);
        if(strcmp(a->des,"manager")==0)
        printf("%10s%10d%10s%10s%10f\n",a->name,a->id,a->post,a->branch,a->sal);
        }
        break;
        case 4:
        printf("Thank you!!\n");
        return 0;
        break;
        default:
        printf("invalid input,please enter option again\n");
        break;
        }
        fclose(fp3);
        return 0;
        }


我就写到这里~但error弄不走~
作者: Super-Tomato    时间: 2009-9-10 11:29 PM
哇.... 那麼難看 coding 哦
那你的 error 是甚麼??
作者: AirWalker    时间: 2009-9-10 11:49 PM
哈哈。。有人中骂哦。。哈哈。。em0013
作者: yangzz    时间: 2009-9-10 11:53 PM
标题: 回复 #4 Super-Tomato 的帖子
我读工程系~学coding已经很不错了啦~看到都傻掉~换了换了~现在用
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int main()
{char cmpa,cmpb;

FILE*fp1;
char name[10],designation[25];int id,branch,op=1;float salary,post;
fp1=fopen("salary_A.txt","w");
while(op==1)
{
printf("enter name, id, post, branch and salary:");
scanf("%s,%d,%s,%d,%d",&name,&id,&post,&branch,&salary);
fprintf(fp1,"%s\t%d\t%s\t\t%d\t%d\n",name,id,post,branch,salary);
printf("Enter 1 to continue:");
scanf("%d",&op);
}
fclose(fp1);


FILE*fp2;
fp2=fopen("salary_B.txt","w");
while(op==1)
{
printf("enter name, id, post, branch and salary:");
scanf("%s,%d,%s,%d,%d",&name,&id,&post,&branch,&salary);
fprintf(fp2,"%s\t%d\t%s\t\t%d\t%d\n",name,id,designation,branch,salary);
printf("Enter 1 to continue:");
scanf("%d",&op);
}
fclose(fp2);
}

等等下~看看error先
作者: yangzz    时间: 2009-9-10 11:55 PM
标题: 回复 #5 AirWalker 的帖子
静静啦你!我做到很pek cek了的咯~人家我是算equilibelium的~不是programming~好过有些人读IT但什么都不懂~哈哈em0012 em0012
作者: AirWalker    时间: 2009-9-11 12:04 AM
严格上是foundation in IT 我懂vb啊。。em0037
作者: Super-Tomato    时间: 2009-9-11 12:07 AM
原帖由 yangzz 于 2009-9-10 11:53 PM 发表
我读工程系~学coding已经很不错了啦~看到都傻掉~换了换了~现在用
#include
#include
#include

int main()
{char cmpa,cmpb;

FILE*fp1;
char name[10],designation[25];int id,branch,op=1;float sal ...



我看了沒甚麼大問題, 直接貼出你的錯誤吧, 如果沒錯應該可以正常編譯
作者: yangzz    时间: 2009-9-11 12:46 AM
标题: 回复 #9 Super-Tomato 的帖子
又弄多一个了~这个比较好~但print出来的东西会多一行~


#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int main()
{

FILE*fp1;
FILE*fp2;
FILE*fp3;
char name[10],post[25],name1[10],post1[25];
int id,branch,id1,branch1;
float salary,salary1;
fp1=fopen("salary_A.txt","r");
fp2=fopen("salary_B.txt","r");
fp3=fopen("MERGE.txt","w");
while(!feof(fp1))
{
fscanf(fp1,"%s%d%s%d%f",&name,&id,&post,&branch,&salary);

fprintf(fp3,"%s\t%d\t%s\t\t%d\t%.2f\n",name,id,post,branch,salary);
}

while(!feof(fp2))
{
fscanf(fp2,"%s%d%s%d%f",&name1,&id1,&post1,&branch1,&salary1);
fprintf(fp3,"%s\t%d\t%s\t\t%d\t%.2f\n",name1,id1,post1,branch1,salary1);
}


fclose(fp1);
fclose(fp2);





return 0;

}



这个的error就是当我compile是~
会出现这个~
DEREK        1        A                1        10.00
ABIAK        2        B                2        11.00
KANIN        3        C                3        12.00
KANIN        3        C                3        12.00
ABOY        999        Z                100        99.00
ADON        998        Y                99        111.00
ADON        998        Y                99        111.00
为什么kanin还有adon会print多一次??
怎样fix?
作者: Super-Tomato    时间: 2009-9-11 01:09 AM
原帖由 yangzz 于 2009-9-11 12:46 AM 发表
又弄多一个了~这个比较好~但print出来的东西会多一行~


#include
#include
#include

int main()
{

FILE*fp1;
FILE*fp2;
FILE*fp3;
char name[10],post[25],name1[10],post1[25];
int id,branc ...



因為你是使用 feof 來讀取每行啊, 但是你沒判斷所讀取的最後一行是否為 null
作者: yangzz    时间: 2009-9-11 01:20 AM
标题: 回复 #11 Super-Tomato 的帖子
那我要怎样判断最后一行为NULL?然后不去执行fprintf多一次~可不可以帮我改改我的coding?
作者: Super-Tomato    时间: 2009-9-11 01:31 AM
原帖由 yangzz 于 2009-9-11 01:20 AM 发表
那我要怎样判断最后一行为NULL?然后不去执行fprintf多一次~可不可以帮我改改我的coding?



你去看看我的測試吧

http://super-tomato.net/download/fscanf.exe
作者: yangzz    时间: 2009-9-11 04:17 AM
标题: 回复 #13 Super-Tomato 的帖子
谢谢哦!对我很大帮助~
我刚刚自己一个人在想的~
我的电脑没有compiler~


#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int main()
{
    FILE *fp1,*fp2,*fp3;
    char name [10],post[25];
    int id,branch,i=0;
    float salary;
   
    fp1=fopen("salary_A.txt","r");
    fp2=fopen("salary_B.txt","r");
    fp3=fopen("merge.txt","w");
   
    if(fp1 !=NULL && fp2 !=NULL && fp3 !=NULL)
    while (!feof(fp1),(fp2))
    {
          printf("Copy line %d\n",++i);
          fscanf(fp1,"%s\t%d\t%s\t\t%d\t%f\n",name,&id,post,&branch,&salary);
          fscanf(fp2,"%s\t%d\t%s\t\t%d\t%f\n",name,&id,post,&branch,&salary);
          fprintf(fp3,"%s\t%d\t%s\t\t%d\t%2f\n",name,id,post,branch,salary);
         
          }
    else
    printf("Error opening file");
   
    fclose(fp1);
    fclose(fp2);
    fclose(fp3);
   
    return 0;
}
   
   
希望没问题~
明天再让teamate过目过目~
呵呵~
谢谢 super-tomato
作者: Super-Tomato    时间: 2009-9-11 07:54 AM
原帖由 yangzz 于 2009-9-11 04:17 AM 发表
谢谢哦!对我很大帮助~
我刚刚自己一个人在想的~
我的电脑没有compiler~


#include
#include
#include

int main()
{
    FILE *fp1,*fp2,*fp3;
    char name [10],post[25];
    int id,branch ...


while (!feof(fp1),(fp2))
    {
          printf("Copy line %d\n",++i);
          fscanf(fp1,"%s\t%d\t%s\t\t%d\t%f\n",name,&id,post,&branch,&salary);
          fscanf(fp2,"%s\t%d\t%s\t\t%d\t%f\n",name,&id,post,&branch,&salary);

          fprintf(fp3,"%s\t%d\t%s\t\t%d\t%2f\n",name,id,post,branch,salary);
         
          }


這裡絕對有問題
作者: yangzz    时间: 2009-9-11 10:36 AM
标题: 回复 #15 Super-Tomato 的帖子
哈哈~看到问题了~很好笑!超可爱的~lolxem0003
我弄到它不会重复copy~
但是不会merge起来了~
作者: Super-Tomato    时间: 2009-9-11 11:06 AM
原帖由 yangzz 于 2009-9-11 10:36 AM 发表
哈哈~看到问题了~很好笑!超可爱的~lolxem0003
我弄到它不会重复copy~
但是不会merge起来了~



所以我才把紅色部分列出告訴你問題點所在, 先想想紅色部分有甚麼邏輯上的問題
作者: 希涯    时间: 2009-9-13 09:47 PM
tomato兄 你是用什么软件来写程序的?
我看到你测试
好像很我们的不同
我是用visual studio
作者: Super-Tomato    时间: 2009-9-13 11:13 PM
原帖由 希涯 于 2009-9-13 09:47 PM 发表
tomato兄 你是用什么软件来写程序的?
我看到你测试
好像很我们的不同
我是用visual studio



我是用免費的 IDE 軟體 Code::Blocks, 而編譯器則可以選擇 GCC, VC++ 和 BCB
作者: 希涯    时间: 2009-9-13 11:40 PM
原帖由 Super-Tomato 于 2009-9-13 11:13 PM 发表



我是用免費的 IDE 軟體 Code::Blocks, 而編譯器則可以選擇 GCC, VC++ 和 BCB

其实还蛮好奇的
有没有类似all in one 的软件?
可以用于编写java,C/C++,VB,php.net等等
作者: Super-Tomato    时间: 2009-9-13 11:46 PM
原帖由 希涯 于 2009-9-13 11:40 PM 发表

其实还蛮好奇的
有没有类似all in one 的软件?
可以用于编写java,C/C++,VB,php.net等等


可設定 java, c++, php, html 等的 IDE 軟體應該蠻多的, 到 google 就可以搜索了, 而微軟的某些產品方面大概只有用回他們本身的 IDE 吧
作者: 希涯    时间: 2009-9-14 12:08 AM
原帖由 Super-Tomato 于 2009-9-13 11:46 PM 发表


可設定 java, c++, php, html 等的 IDE 軟體應該蠻多的, 到 google 就可以搜索了, 而微軟的某些產品方面大概只有用回他們本身的 IDE 吧

那有没有些好介绍?em0013
作者: Super-Tomato    时间: 2009-9-14 12:24 AM
原帖由 希涯 于 2009-9-14 12:08 AM 发表

那有没有些好介绍?em0013


Net Bean 吧, 蠻多人使用的
作者: 希涯    时间: 2009-9-14 12:39 AM
原帖由 Super-Tomato 于 2009-9-14 12:24 AM 发表


Net Bean 吧, 蠻多人使用的

谢谢啦em0011
作者: 磨刀狂徒    时间: 2009-9-27 04:05 PM
比较习惯用wxWidgets。。。Code::Blocks还没用过
作者: Super-Tomato    时间: 2009-9-27 09:01 PM
原帖由 磨刀狂徒 于 2009-9-27 04:05 PM 发表
比较习惯用wxWidgets。。。Code::Blocks还没用过


wxWidgets 是個支援多种 IDE 的免費 RAD 開發工具,所以 Code::Blocks 也只是個 IDE 而已




欢迎光临 JBTALKS.CC (https://jbtalks.my/) Powered by Discuz! X2.5