Spaces:
Paused
Paused
| #This program will save your information for quicker catching | |
| #The data will only save locally. | |
| 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() | |