|
|
|
|
| import ensure_package_exist
|
| ensure_package_exist.ensure_package_exist()
|
| import json,re
|
| from type_defs import Course, CourseData, UserData
|
|
|
|
|
| def save_user_date(user_data:UserData):
|
| with open("user_data.json",mode="w",encoding="utf-8") as file:
|
| json.dump(user_data.to_dict(),file,indent=2)
|
|
|
| def main()->UserData:
|
| user_data = UserData(
|
| std_id=input("Input your Student ID: "),
|
| password=input("Input your password: ")
|
| )
|
|
|
| while True:
|
| source=""
|
| while source not in ["a","b","q"]:
|
| source = input("输入课程来源(a.方案选课/b.自由选课/q.停止添加)(输入a或b即可): ")
|
| if(source == "q"):
|
| break
|
| course_id = input("输入课程号: ")
|
| course_index = input("输入课序号(必须为两位数,如:01、33): ")
|
| try:
|
| int(course_id),int(course_index)
|
| if len(course_index) != 2:
|
| raise Exception
|
| new_course = Course(course_id=course_id, course_index=course_index)
|
| if source == "a":
|
| user_data.course.a.append(new_course)
|
| else:
|
| user_data.course.b.append(new_course)
|
| except:
|
| print("Invaild course!Failed to add the course!")
|
| continue
|
|
|
| save_user_date(user_data)
|
| print("Done!")
|
| return user_data
|
|
|
| def show_user_data(user_data:UserData) -> None:
|
| print("User information:")
|
| print("Student ID:%s"%(user_data.std_id),"Password:%s"%(user_data.password),sep="\n")
|
| print("Your courses:")
|
| print("-"*20)
|
| print("Plan courses:")
|
| print("\n".join(map(lambda x:"Course %s_%s"%(x.course_id,x.course_index),user_data.course.a)))
|
| print("-"*20)
|
| print("Free courses:")
|
| print("\n".join(map(lambda x:"Course %s_%s"%(x.course_id,x.course_index),user_data.course.b)))
|
| print("-"*20)
|
|
|
| def update(user_data:UserData) -> UserData:
|
| show_user_data(user_data)
|
|
|
| operate = ""
|
| while True:
|
| while operate not in ["i","p","a","b","q"]:
|
| operate = input("请输入更新指令(i.更改学号/p.更改密码/a.更改方案选课/b.更改自由选课/s.展示当前信息/q.保存并退出)(输入前面的字母即可):")
|
| if operate == "q":
|
| return user_data
|
| elif operate == "i":
|
| user_data.std_id = input("Input the new std_id:")
|
| print("Student ID has been updated!")
|
| elif operate == "p":
|
| new_passwd = input("Input the new password:")
|
| if new_passwd == input("Input the new password again:"):
|
| user_data.password = new_passwd
|
| print("Password has been updated!")
|
| else:
|
| print("The passwords entered did not match.Failed to update the password!")
|
| elif operate in ["a","b"]:
|
| order,args = "",[]
|
| name = "方案选课" if operate == "a" else "自由选课"
|
| en_name = "Plan courses" if operate == "a" else "Free courses"
|
| course_list = user_data.course.a if operate == "a" else user_data.course.b
|
| while True:
|
| print("%s:"%(en_name))
|
| print("\n".join(map(lambda x:"%d.%s"%(x[0],x[1]),enumerate(map(lambda x:"Course %s_%s"%(x.course_id,x.course_index),course_list),1))))
|
| while order not in ["a","d","q"]:
|
| manage = input("请输入更改%s的指令(a [课程号] [课序号].添加新的课程/d [序号].删除第[序号]条课程/q.退出方案选课更新)(输入指令并带上参数):"%(name))
|
| order = manage.split(" ")[0]
|
| args = re.findall(r"\d+",manage)
|
| if order == "q":
|
| break
|
| elif order == "a":
|
| if len(args) == 2:
|
| try:
|
| numbers = [int(i) for i in args]
|
| if len(args[1]) != 2:
|
| raise Exception
|
| new_course = Course(course_id=args[0], course_index=args[1])
|
| if not new_course in course_list:
|
| course_list.append(new_course)
|
| print("Successfully added Course %s_%s!"%(args[0],args[1]))
|
| else:
|
| print("Course %s_%s has already existed!"%(args[0],args[1]))
|
| except:
|
| print("Invaild arguments type!Failed to add the course!")
|
| else:
|
| print("Invaild number of arguments!Failed to add the course!")
|
| elif order == "d":
|
| if len(args) == 1:
|
| try:
|
| pos = int(args[0])
|
| try:
|
| if pos <= 0:
|
| raise Exception
|
| target = course_list[pos-1]
|
| del course_list[pos-1]
|
| print("Successfully deleted the Course %s_%s!"%(target.course_id,target.course_index))
|
| except:
|
| print("Invaild position!Failed to delete the course!")
|
| except:
|
| print("Invaild argument type!Failed to delete the course!")
|
| else:
|
| print("Invaild number of arguments!Failed to add the course!")
|
| order,args = "",[]
|
| elif operate == "s":
|
| show_user_data(user_data)
|
| operate = ""
|
|
|
| if __name__ == "__main__":
|
| try:
|
| with open("user_data.json",mode="r") as file:
|
| new_json = update(UserData.from_dict(json.load(file)))
|
| save_user_date(new_json)
|
| print("Update finished!")
|
| except:
|
| main()
|
|
|
| |