C语言学生管理系统源代码

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

/*
    功能:
    1.添加学生信息(学号,姓名,性别,5门课程成绩)
    2.按学号或者姓名查找、修改、删除和保存各个学生的信息
    3.按学号或者总分排序输出每个学生的信息以及总分、平均分和名次
    4.计算全班各门功课的平均分,显示每门课程低于平均分的学生信息
    5.显示每门课程成绩在90分以上的,以及每门课程不及格的学生信息
    
    注意:必须排序后才能排出名次
*/

#define N 50

/*定义结构类型*/
struct student
{
    int stuNo;
    char name[10];
    char sex[5];
    float score1 ;
    float score2;
    float score3;
    float score4;
    float score5;
    float sumScore;
    float avgScore;
    int ranking;      //排名

}stu[N];

/*函数声明*/
int login();
void add();
void del();
void delByIndex(int i);
void search();
int searchByNo();
int searchByName();
void update();
void updateByIndex(int i);
void display();
void sort();
void sortByNo();
void sortBySum();
void writeFile();
void readFile();
struct student input();
void lowScoreAvg();
void greaterThanNinty();
void failed();

int count=0;  //存储当前已有的学生人数

/*程序入口*/
void main()
{
    int select;
    int isSuccess;
    int c = 0;//记录登入的次数
    do
    {
        isSuccess = login();
        if(!isSuccess)
        {
            printf("\n\t\t\t用户名不存在或密码错误,请检查后重新输入!\n");
            printf("\n\t\t\t<您还有 %d 次机会!>",2-c);
            c++;
            if(c==3)
            {
                printf("\n\t\t您已尝试登入三次且失败,系统将退出!!!\n");
                exit(1);
            }
            fflush(stdin);
            getch();
        }
        else
            break;
    }while(1);

do
    {
        system("cls");
        printf("\n\t\t欢迎进入学生成绩管理系统\n");
        printf("\n***********************************************\n");
        printf("\n1.添加学生信息\n");
        printf("\n2.删除学生信息\n");
        printf("\n3.修改学生信息\n");
        printf("\n4.查找学生信息\n");
        printf("\n5.显示学生信息\n");
        printf("\n6.学生信息排序\n");        
        printf("\n7.单门课程低于课程平均分的学生信息\n");
        printf("\n8.每门课程成绩在90分以上的学生信息\n");
        printf("\n9.每门课程不及格的学生信息\n");
        printf("\n10.保存文件\n");     
        printf("\n11.打开文件\n");     
        printf("\n12.退出系统\n");
        printf("\n**********************************************\n");
        printf("\n\t请选择<1--12>:");
        scanf("%d",&select);
        if(select == 12)
        {
            printf("\n\t~~bye!!!\n");
            break;
        }
        switch(select)
        {
        case 1:
            add();
            break;
        case 2:
            del();
            break;
        case 3:
            update();
            break;
        case 4:
            search();
            break;
        case 5:
            display();
            break;
        case 6:
            sort();
            display();
            printf("\n排序已完成,按任意键继续...");
            fflush(stdin);
            getch();
            break;
        case 7:
            lowScoreAvg();
            break;
        case 8:
            greaterThanNinty();
            break;
        case 9:
            failed();
            break;
        case 10:
            writeFile();
            break;
        case 11:
            readFile();
            break;
        default:
            printf("\n\t您输入的选项无效!按任意键重新输入...\n");
            getch();
        }

}while(1);
}

/*登录界面*/
int login()
{
    int i=0;
    char uname[20];
    char pwd[20];
    system("cls");
    printf("\n\t-----------------------------------------------------------\n");
    printf("\n\t\t用户名:");
    gets(uname);
    printf("\n\t\t密  码:");
    fflush(stdin);

do
    {
        pwd[i] = getch();
        if(pwd[i]!=‘\r‘)
        {
            i++;
            printf("*");
        }
    }while(pwd[i]!=‘\r‘);
    pwd[i]=‘\0‘;

//验证帐号密码
    if(strcmp(uname,"admin")==0 && strcmp(pwd,"admin")==0)
        return 1;
    else
        return 0;
}

/*信息录入*/
struct student input()
{
    int i;
    struct student st;
    do{
        printf("\n输入学号:");
        scanf("%d",&st.stuNo);
        if(searchByNo(st.stuNo)!=-1)
        {
            printf("\n您输入的学号已存在!!!按任意键重新输入...\n");
        }
        else
        {
            break;
        }
    }while(1);
    fflush(stdin);

do{
        printf("请输入姓名:");
        scanf("%s",st.name);
        //gets(st.name);
        if(searchByName(st.name)!=-1)
        {
            printf("\n您输入的姓名已存在!!!按任意键重新输入...\n");
        }
        else
        {
            break;
        }
    }while(1);
    fflush(stdin);

printf("请输入性别:");
    scanf("%s",st.sex);
    //gets(st.sex);
    printf("请输入课程1的成绩:");
    scanf("%f",&st.score1);
    printf("请输入课程2的成绩:");
    scanf("%f",&st.score2);
    printf("请输入课程3的成绩:");
    scanf("%f",&st.score3);
    printf("请输入课程4的成绩:");
    scanf("%f",&st.score4);
    printf("请输入课程5的成绩:");
    scanf("%f",&st.score5);
    st.sumScore = st.score1 + st.score2 + st.score3 + st.score4 + st.score5 ;
    st.avgScore =st.sumScore / 5;

return st;
}

/*添加学生*/
void add()
{
    char ans;
    do
    {
        stu[count] = input();
        count++;
        printf("\n\t信息录入完成,是否继续(y|n):");
        fflush(stdin);
        ans = getchar();
    }while(ans == ‘y‘||ans == ‘Y‘);
}

/*删除界面*/
void del()
{
        int op;
        char name[10];
        int no;
        int i;
        do{
            system("cls");
            printf("主界面>删除界面");
            printf("\n\t\t***********************************************\n");
            printf("\n\t\t\t 1.根据学号删除\n");
            printf("\n\t\t\t 2.根据姓名删除\n");
            printf("\n\t\t\t 0.返回主菜单 \n");
            printf("\n\t\t***********************************************\n");
            printf("\n\t请选择: ");
            scanf("%d",&op);
            if(op == 0)
            {
                break;
            }
            switch(op)
            {
                case 1:
                    printf("请输入需要修改的学生信息的学号:");
                    scanf("%d",&no);
                    i=searchByNo();
                    if(i!=-1){
                        delByIndex(i);
                    }
                    else{
                        printf("\n您输入的学号不存在!!!\n");
                    }
                    break;
                case 2:            
                    printf("请输入需要修改的学生信息的姓名:");
                    scanf("%s",name);
                    //gets(name);
                    i=searchByName(name);
                    if(i!=-1){
                        delByIndex(i);
                    }
                    else{
                        printf("\n您输入的姓名不存在!!!\n");
                    }
                    break;
                default:
                    printf("\n您输入的选项无效!!!按任意键重新输入...\n");
                    fflush(stdin);
                    getch();
            }
        }while(1);
}

/*根据学号删除学生信息*/
void delByIndex(int i)
{
    char ans;
    do
    {
        printf("\n需要删除的学生信息如下:\n");
        printf("\n学号\t姓名\t性别\t课程1\t课程2\t课程3\t课程4\t课程5\t总分\t平均分\n");
        printf("-------------------------------------------------------------------------------\n");
        printf("%d\t%s\t%s\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\n",                
        stu[i].stuNo,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].score4,stu[i].score5,
        stu[i].sumScore,stu[i].avgScore);
        printf("\n确认删除该学生信息吗?<y|n>:");
        fflush(stdin);
        ans = getchar();
        if(ans == ‘y‘ || ans ==‘Y‘)
        {
            int j;
            for(j = i;j>count-1 ; j++)
            {stu[j] = stu[j+1];}
            count--;
            printf("\n删除操作完成,按任意键继续...");
            fflush(stdin);
            getch();
        }    
            
        printf("\n是否继续执行删除操作?<y|n>:");
        fflush(stdin);
        ans = getchar();
        if(ans == ‘y‘||ans == ‘Y‘)
            continue;
        else
            break;
    }while(1);
}

/*修改界面*/
void update()
{
        int op;
        char name[10];
        int no;
        int i;
        do{
            system("cls");
            printf("主界面>修改界面");
            printf("\n\t\t***********************************************\n");
            printf("\n\t\t\t 1.根据学号修改\n");
            printf("\n\t\t\t 2.根据姓名修改\n");
            printf("\n\t\t\t 0.返回主菜单 \n");
            printf("\n\t\t***********************************************\n");
            printf("\n\t请选择: ");
            scanf("%d",&op);
            if(op == 0)
            {
                break;
            }
            switch(op)
            {
                case 1:
                    printf("请输入需要修改的学生信息的学号:");                    
                    scanf("%d",&no);
                    i=searchByNo();
                    if(i!=-1){
                        updateByIndex(i);
                    }
                    else{
                        printf("\n您输入的学号不存在!!!\n");
                    }
                    break;
                case 2:                    
                    printf("请输入需要修改的学生信息的姓名:");
                    scanf("%s",name);
                    //gets(name);
                    i=searchByName();
                    if(i!=-1){
                        updateByIndex(i);
                    }
                    else{
                        printf("\n您输入的姓名不存在!!!\n");
                    }
                    break;
                default:
                    printf("\n您输入的选项无效!!!按任意键重新输入...\n");
                    fflush(stdin);
                    getch();
            }
        }while(1);
}

/*根据下标修改信息*/
void updateByIndex(int i)
{
    printf("请输入修改后的性别:");
    scanf("%s",stu[i].sex);
    //gets(stu[i].sex);
    printf("请输入修改后的课程1的成绩:");
    scanf("%f",&stu[i].score1);
    printf("请输入修改后的课程2的成绩:");
    scanf("%f",&stu[i].score2);
    printf("请输入修改后的课程3的成绩:");
    scanf("%f",&stu[i].score3);
    printf("请输入修改后的课程4的成绩:");
    scanf("%f",&stu[i].score4);
    printf("请输入修改后的课程5的成绩:");    
    scanf("%f",&stu[i].score5);
    stu[i].sumScore = stu[i].score1 + stu[i].score2 + stu[i].score3 + stu[i].score4 + stu[i].score5 ;
    stu[i].avgScore =stu[i].sumScore / 5;
}

/*查找界面*/
void search()
{
    int op;
    int no;
    char name[10];
    int i;
    do{
        system("cls");
        printf("主界面>查找界面");
        printf("\n\t\t***********************************************\n");
        printf("\n\t\t\t 1.根据学号查找\n");
        printf("\n\t\t\t 2.根据姓名查找\n");
        printf("\n\t\t\t 0.返回主菜单 \n");
        printf("\n\t\t***********************************************\n");
        printf("\n\t请选择: ");
        scanf("%d",&op);
        if(op == 0)
        {
            break;
        }
        switch(op)
        {
        case 1:            
            printf("请输入要查找的学生信息的学号:");
            scanf("%d",&no);
            i=searchByNo(no);
            printf("\n查询结果:\n");
            printf("\n学号\t姓名\t性别\t课程1\t课程2\t课程3\t课程4\t课程5\t总分\t平均分\n");
            printf("-------------------------------------------------------------------------------\n");
            printf("%d\t%s\t%s\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\n",
                stu[i].stuNo,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].score4,stu[i].score5,
                stu[i].sumScore,stu[i].avgScore);
            fflush(stdin);
            getch();
            break;
        case 2:    
            printf("请输入姓名:");
            scanf("%s",name);
            //gets(name);
            i=searchByName(name);
            printf("\n查询结果:\n");
            printf("\n学号\t姓名\t性别\t课程1\t课程2\t课程3\t课程4\t课程5\t总分\t平均分\n");
            printf("-------------------------------------------------------------------------------\n");
            printf("%d\t%s\t%s\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\n",
                stu[i].stuNo,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].score4,stu[i].score5,
                stu[i].sumScore,stu[i].avgScore);
            fflush(stdin);
            getch();
            break;
        default:
            printf("\n您输入的选项无效!!!按任意键重新输入...\n");
            fflush(stdin);
            getch();
        }
    }while(1);
}

/*根据学号查找*/
int searchByNo(int stuNo)
{
    int i;
    for(i=0;i<count;i++)
    {
        if(stu[i].stuNo == stuNo)
            return i;
    }
    return -1;
}

/*根据姓名查找*/
int searchByName(char stuName[])
{    
    int i;    
    for(i=0;i<count;i++)
    {
        if(strcmp(stu[i].name,stuName)==0)
            return i;
    }
    return -1;
}

/*显示信息*/
void display()
{
    system("cls");
    int i;
    printf("\n\t\t*** 显示学生 ***\n");
    printf("\n学号\t姓名\t性别\t课程1\t课程2\t课程3\t课程4\t课程5\t总分\t平均分\n");
    printf("===============================================================================\n");
    for(i=0;i<count;i++)
    {
        printf("%d\t%s\t%s\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\n",
            stu[i].stuNo,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].score4,stu[i].score5,
            stu[i].sumScore,stu[i].avgScore);
    }
    printf("===============================================================================\n");
    printf("\n\t\t按任意键返回主菜单...");
    fflush(stdin);
    getch();
}

/*排序界面*/
void sort()
{
    int op;
    do{
        system("cls");
        printf("主界面>排序界面");
        printf("\n\t\t***********************************************\n");
        printf("\n\t\t\t 1.按学号排序<升序> \n");
        printf("\n\t\t\t 2.按总分排序<降序> \n");
        printf("\n\t\t\t 0.返回主菜单 \n");
        printf("\n\t\t***********************************************\n");
        printf("\n\t请选择: ");
        scanf("%d",&op);
        if(op == 0)
        {
            break;
        }
        switch(op)
        {
        case 1:
            sortByNo();
            break;
        case 2:
            sortBySum();
            break;
        default:
            printf("\n您输入的选项无效!!!按任意键重新输入...\n");
            fflush(stdin);
            getch();
        }
    }while(1);
}

/*按学号排序*/
void sortByNo()      
{
    sortBySum();
    int i,j;
    struct student temp;
    for(i=0;i<count;i++)
    {
        for(j=0;j<count-1-i;j++)
        {
            if(stu[j].stuNo>stu[j+1].stuNo)
            {
                temp=stu[j+1];
                stu[j+1]=stu[j];
                stu[j]=temp;
            }
        }
    }
}

/*按总分排序*/
void sortBySum()    
{
    int i,j;
    struct student temp;
    for(i=0;i<count;i++)
    {
        for(j=0;j<count-1-i;j++)
        {
            if(stu[j].sumScore<stu[j+1].sumScore)
            {
                temp=stu[j+1];
                stu[j+1]=stu[j];
                stu[j]=temp;
            }
        }
    }
    //排名
    for(i=0;i<count;i++)
    {
        stu[i].ranking=i+1;
    }
}

/*保存文件*/
void writeFile()
{
    FILE *fp;
    fp = fopen("stu.txt","wb");

int i;

for(i=0;i<count;i++)
    {
        printf("%d\t%s\t%s\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\n",
            stu[i].stuNo,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].score4,stu[i].score5,
            stu[i].sumScore,stu[i].avgScore);
        fwrite(&stu[i],sizeof(struct student),1,fp);
    }
    
    fclose(fp);
    printf("\n文件保存完毕,按任意键继续...\n");
    printf("\n");
    fflush(stdin);
    getch();
}

/*读取文件*/
void readFile()
{
    FILE *fp;
    fp = fopen("stu.txt","rb");

if(fp==NULL)
    {
        printf("\nSorry,您要打开的文件不存在。按任意键继续...\n");
        fflush(stdin);
        getch();
    }
    else
    {
        fseek(fp,0,2);
        count= ftell(fp)/sizeof (struct student);
        rewind(fp);
        int i;
        for(i=0;i<count;i++)
        {
            fread(&stu[i],sizeof(struct student),1,fp);
            printf("%d\t%s\t%s\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\n",
                stu[i].stuNo,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].score4,stu[i].score5,
                stu[i].sumScore,stu[i].avgScore);
        }
        fclose(fp);
        printf("\n文件打开完成,按任意键返回...\n");
        printf("\n");
        fflush(stdin);
        getch();
    }

}

/*单门课程低于课程平均分的学生信息*/
void lowScoreAvg()
{
     int i;
     float avgCourseScore[5];    
     for(i=0;i<count;i++)
     {
        avgCourseScore[0]+=stu[i].score1;
        avgCourseScore[1]+=stu[i].score2;
        avgCourseScore[2]+=stu[i].score3;
        avgCourseScore[3]+=stu[i].score4;
        avgCourseScore[4]+=stu[i].score5;
     }
    //求出每门课的平均分
     for(i=0;i<5;i++)
     {
        avgCourseScore[i]=avgCourseScore[i]/5;
     }
     printf("\n学号\t姓名\t性别\t课程1\t课程2\t课程3\t课程4\t课程5\t总分\t平均分\n");
     for(i=0;i<count;i++)
     {
        if(stu[i].score1<avgCourseScore[0]||stu[i].score2<avgCourseScore[1]||stu[i].score3<avgCourseScore[2]||stu[i].score4<avgCourseScore[3]||stu[i].score5<avgCourseScore[4])
        {
            printf("%d\t%s\t%s\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\n",                
                stu[i].stuNo,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].score4,stu[i].score5,
                stu[i].sumScore,stu[i].avgScore);
            fflush(stdin);
            getch();
        }
     }
}

/*每门课程成绩在90分以上的学生信息*/
void greaterThanNinty()
{
    int i;
    printf("\n学号\t姓名\t性别\t课程1\t课程2\t课程3\t课程4\t课程5\t总分\t平均分\n");
    for(i=0;i<count;i++)
     {
        if(stu[i].score1>90&&stu[i].score2>90&&stu[i].score3>90&&stu[i].score4>90&&stu[i].score5>90)
        {
            printf("%d\t%s\t%s\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\n",                
                stu[i].stuNo,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].score4,stu[i].score5,
                stu[i].sumScore,stu[i].avgScore);
            fflush(stdin);
            getch();
        }
     }
}

/*每门课程不及格的学生信息*/
void failed()
{
    int i;
    printf("\n学号\t姓名\t性别\t课程1\t课程2\t课程3\t课程4\t课程5\t总分\t平均分\n");
    for(i=0;i<count;i++)
     {
        if(stu[i].score1<60&&stu[i].score2<60&&stu[i].score3<60&&stu[i].score4<60&&stu[i].score5<60)
        {
            printf("%d\t%s\t%s\t%5.2f\t


%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\n",                
                stu[i].stuNo,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].score4,stu[i].score5,
                stu[i].sumScore,stu[i].avgScore);
            fflush(stdin);
            getch();
        }
     }
}

				
时间: 2024-11-05 13:45:47

C语言学生管理系统源代码的相关文章

c语言学生管理系统链表(dev vs2012下可以运行)

struct student { char name[10]; char sex[5]; long int num;//学号 int xuhao; int age; float score[3]; float averange; char DJ;//存放等级哦 struct student *next; };//定义结构体变量保存 名字 性别 年龄 成绩] 结构体声明 int n;//存放学生人数 int man;//存放统计的男生数 float JY(float a)//校验成绩使范围0-10

C语言 学生管理系统

//学生成绩管理系统 //用户名:enjoy65 //密码: enjoy65 #include<stdio.h> #include<string.h> #include<stdlib.h> //定义全局变量x,i,j,n char x; int i,j, n; struct student //定义结构体 { int id ; char name[20]; float Math; float English; float Chinese; float average;

C语言学生管理系统源码分享

1 大家好 2 我就是如假包换的...陈玲 3 自从运营了C语言程序设计微信公众号 4 很多粉丝都给我备注 5 ...奇葩 6 实在是不敢当 7 也被人开始叫玲玲姐 8 我知道 9 很多人都想看我出境 10 我本人也有 1 年多的舞台演讲训练 11 实话告诉大家 -- 我喜欢出境 12 13 不过,既然我们做编程语言公众号的,就要去掉其他因素,我们挖掘文字本身所蕴含的力量.所以,这次分享的表达方式就是 -- 纯文字. 14 15 今天的分享,只有一个目的 16 就是上代码 17 那么,准备好了

C语言编程入门——综合练习(三)学生管理系统

C语言学生管理系统: 此程序综合了链表,排序等知识,可以说是一个综合练习. # include <stdio.h> # include <malloc.h> # include <stdlib.h> typedef struct Student { char name[20]; char sex; int age; int score; char sid[20]; struct Student * pNext; }ST, *PST; void print(void);

学生管理系统-火车订票系统 c语言课程设计

概要: C 语言课程设计一---学生管理系统 使使用 C 语言实现学生管理系统.系统实现对学生的基本信息和考试成绩的 管理.采用终端命令界面,作为系统的输入输出界面.采用文件作为信息存储介质. 功能描述: 学生信息: 基本信息: 学号: int 姓名: char 128 密码: char 32 年龄: int 班级: int 成绩信息: 数学成绩: int C 语言成绩:int 语文成绩: int 名次: int 1.  实现对学生信息基本信息的录入,其中名次根据成绩自动计算(添加).学号不能

C语言学生学籍信息管理系统源码附赠实验报告

一.课程设计目标 C语言课程设计的目的是通过课程设计的综合训练,培养学生实际分析问题.编程和动手能力,最终目标是通过这种形式,帮助学生系统掌握该门课程的主要内容,更好地完成教学任务.本课程设计具有如下特点:重点在于C语言的基本特征上,涵盖了C语言的重要基础知识.结合了实际应用的要求,使课程设计既涵盖知识点,又接近工程实际需要.通过激发学习兴趣,调动学生主动学习的积极性,并引导他们根据实际编程要求,训练自己实际分析问题的能力以及编程能力,并养成良好的编程习惯. 另外,在实际编程中,为了提高编程质量

Servlet实例开发---学生管理系统

Servlet总结 本程序采用Servlet开发技术,MVC分层,所有程序在设计时都要接口为操作的标准,主要逻辑操作只有增删改查. 具体实现操作请看源代码. 本程序采用的是MYSQL数据库,需加入相应的jar包 目录结构 首先贴上底层数据层: 连接数据库 package com.student.dbc ; import java.sql.* ; public class DatabaseConnection { private static final String DBDRIVER = "or

【IOS开发笔记02】学生管理系统

端到端的机会 虽然现在身处大公司,但是因为是内部创业团队,产品.native.前端.服务器端全部坐在一起开发,大家很容易做零距离交流,也因为最近内部有一个前端要转岗过来,于是手里的前端任务好像可以抛一大坨出去了,这个时候立刻想到了切入IOS开发!!! 事实上,前端开发做到一定时间,要进步很难了,最近几个月扑到业务上便感觉突破不了目前的瓶颈,自身的前端瓶颈主要在两方面:技术深度.技术广度 其实不论深度或者广度来说都不是简单前端能说清楚的事情,不能说了解了angularJS.react等框架技术深度

【IOS开发笔记01】学生管理系统(上)

端到端的机会 虽然现在身处大公司,但是因为是内部创业团队,产品.native.前端.服务器端全部坐在一起开发,大家很容易做零距离交流,也因为最近内部有一个前端要转岗过来,于是手里的前端任务好像可以抛一大坨出去了,这个时候立刻想到了切入IOS开发!!! 事实上,前端开发做到一定时间,要进步很难了,最近几个月扑到业务上便感觉突破不了目前的瓶颈,自身的前端瓶颈主要在两方面:技术深度.技术广度 其实不论深度或者广度来说都不是简单前端能说清楚的事情,不能说了解了angularJS.react等框架技术深度